Aktueller Standort: Startseite> Neueste Artikel> Vermeiden Sie unnötige $ übereinstimmende Inhalte mit der Nicht-Kreislaufgruppierung

Vermeiden Sie unnötige $ übereinstimmende Inhalte mit der Nicht-Kreislaufgruppierung

M66 2025-06-02

In PHP wird die Funktion preg_replace_callback_array normalerweise zur Durchführung von Rückrufvorgängen verwendet, wenn regelmäßig ersetzt werden. Diese Funktion akzeptiert ein Array, dessen Schlüssel reguläre Ausdrücke sind, und Werte sind Rückruffunktionen, die die Übereinstimmung verarbeiten. In einigen Fällen möchten wir jedoch möglicherweise nicht bestimmte Gruppen erfassen, um zu verhindern, dass sie in $ Matches erscheinen, was zu unnötigem Overhead oder einer komplexen Verarbeitung führt.

Verwendung von Nicht-Tapeturing-Paketen

Um zu vermeiden, dass unnötige $ übereinstimmende Inhalte in der Rückruffunktion von PRG_REPLACE_CALLBACK_Array erhalten werden, können wir die Gruppierung ohne Kreislauf verwenden. Die nicht kaufmännische Gruppierung stellt sicher, dass einige Gruppen beim Abzug nicht erfasst werden, wodurch unnötige Matching-Ergebnisse in der Rückruffunktion verringert werden.

Was ist eine nicht kaufende Gruppierung?

Die nicht kaufmännische Gruppierung wird durch Präfixen von Klammern in regulären Ausdrücken mit : . Zum Beispiel (?: ...) ist eine nicht kaufende Gruppe. In diesem Fall werden Gruppen in regulären Ausdrücken nicht in das $ Matches -Array aufgenommen, sondern nur Komponenten, die zum Gruppen von Match -Muster verwendet werden.

Beispielcode

Angenommen, wir haben einen regelmäßigen Ausdruck mit mehreren Gruppen im Inneren, aber wir kümmern uns nur um den passenden Inhalt einiger Gruppen und nicht um den Inhalt anderer. Anschließend können wir eine nicht kaufmännische Gruppierung verwenden, um unsere regulären Ausdrücke zu optimieren.

 <?php
// Beispiel:Ersetzen Sie den Text inURL
$pattern = '/(?:https?:\/\/)(m66.net\/[a-z0-9\/\?=&]*)/i';
$replacement = function ($matches) {
    // Sorge einfachURLDer Pfad Teil von,Keine Notwendigkeit für das GanzeURLund Abschnitt Vereinbarung
    return 'https://m66.net' . $matches[1];
};

$input = 'Bitte besuchen Sie https://m66.net/abc/def?query=xyz oder http://m66.net/12345';
$output = preg_replace_callback_array([
    $pattern => $replacement,
], $input);

echo $output;
?>

Code analysieren

  1. Regulärer Ausdruck :

    • (?: https? Da wir diesen Teil nicht brauchen, verwenden wir die Gruppierung von Nicht-Kapitäns.

    • ( m66.net \/[a-z0-9 \/\ ?

  2. Rückruffunktion :

    • In der Rückruffunktion erhalten wir den Pfadteil der URL über $ Matches [1] und ignorieren den Protokollteil ( https: // oder http: // ).

    • Da das Protokollteil nicht erfasst wird, liefert preg_replace_callback_array nur $ übereinstimmungen [1] als Ersatzwert für die Rückruffunktion.

  3. Ausgangsergebnis :

    • Die URLs im Originaltext werden korrekt durch das Format ersetzt, das uns wichtig ist, und es gibt keine unnötigen $ übereinstimmenden Inhalte.

Zusammenfassen

Wenn Sie die nicht kennzeichnende Gruppierung (?: ...) verwenden, können Sie es nicht tun, unnötige passende Gruppen in der Rückruffunktion zu empfangen. Dies reduziert nicht nur den unnötigen Ressourcenverbrauch, sondern macht den Code auch prägnanter und leicht zu verstehen, insbesondere wenn es sich um komplexe reguläre Ausdrücke handelt, sondern die passenden Ergebnisse, die Aufmerksamkeit erfordern, effektiv reduzieren können.