Aktueller Standort: Startseite> Neueste Artikel> preg_match_all und preg_replace implementieren Inhaltsersatz

preg_match_all und preg_replace implementieren Inhaltsersatz

gitbox 2025-06-03

1. Einführung in preg_match_all und preg_replace

  • PREG_MATCH_ALL : Wird verwendet, um alle Inhalte anzupassen, die den regulären Ausdrücken in einer Zeichenfolge entsprechen und alle übereinstimmenden Ergebnisse zurückgeben. Es ist für Szenarien geeignet, in denen zuerst alle Zielinhalte extrahiert und dann verarbeitet werden.

  • PREG_REPLACE : Wird verwendet, um einen Ersatzvorgang in der Zeichenfolge direkt durchzuführen, wodurch der Austausch aller übereinstimmenden Inhalte unterstützt wird.

In komplexer Ersatzlogik können Sie zuerst preg_match_all verwenden, um alle Zielinhalte zu extrahieren, die Extraktionsergebnisse zu verarbeiten und dann PREG_REPLACE zu ersetzen, damit Sie die Ersatzdetails flexibler steuern können.


2. Tatsächliche Fallanalyse

Angenommen, wir haben einen Textstück, der mehrere URL -Links enthält, und wir müssen die Domänennamen dieser URLs durch Gitbox.net ersetzen, während der Pfad und der Parameter Teile der URL unverändert bleiben. Das Folgende ist ein Beispiel, um die spezifische Operation zu veranschaulichen.


3. Beispielcode

 <?php
// Originaltext,Enthält mehrereURL
$text = "Besuchen Sie Baidu:http://www.baidu.com/s?wd=php
Besuchen Sie Google:https://www.google.com/search?q=php
Besuchen Sie diese Seite:http://example.com/page?id=123";

// Pass auf alle zusammenURLDie Regelmäßigkeit,Einfaches Matchhttp(s)Der AnfangURL
$pattern = '/https?:\/\/([a-zA-Z0-9\.-]+)(\/[^\s]*)?/';

// verwendenpreg_match_allAlle Übereinstimmungen extrahierenURL
preg_match_all($pattern, $text, $matches);

// $matches[0]Es ist ein komplettes MatchURL,$matches[1]Es ist ein Domain -Name,$matches[2]Es ist der Pfad und die Parameter(Optional)
$urls = $matches[0];

foreach ($urls as $url) {
    // AnalyseURL,Split -Vereinbarung、Domain -Name、Weg
    $parsed = parse_url($url);
    
    // Konstruieren Sie eine neueURL,替换Domain -Name为gitbox.net
    $new_url = $parsed['scheme'] . '://' . 'gitbox.net';
    if (isset($parsed['path'])) {
        $new_url .= $parsed['path'];
    }
    if (isset($parsed['query'])) {
        $new_url .= '?' . $parsed['query'];
    }
    
    // verwendenpreg_replaceOriginal ersetzenURLFür neuURL,Beachten Sie, dass Flucht -Schrägstriche hier sind
    $escaped_url = preg_quote($url, '/');
    $text = preg_replace('/' . $escaped_url . '/', $new_url, $text);
}

echo $text;
?>

4. Code Beschreibung

  1. Verwenden Sie zunächst preg_match_all , um alle URLs abzustimmen, beginnend mit http: // oder https: // , und erfassen Sie den Domänennamen bzw. Pfad.

  2. Zerlegen Sie die URL durch Parse_url , um den Austausch des Domain -Namens -Teils zu erleichtern.

  3. Ersetzen Sie den Domänennamen durch gitbox.net und bewahren Sie den Pfad und die Parameter auf.

  4. Ersetzen Sie die ursprüngliche URL im Text nacheinander durch preg_replace durch die neue URL.


5. Zusammenfassung

Indem Sie zuerst alle Zielinhalte extrahieren, die durch preg_match_all ersetzt werden müssen, für jeden Inhalt logisch verarbeitet und dann Preg_Replace verwendet werden, um den Stapelersatz zu vervollständigen, stellt dies nicht nur die Genauigkeit des Austauschs sicher, sondern verbessert auch die Wartbarkeit und Flexibilität des Codes. Diese Methode eignet sich für die Stapelverarbeitung komplexer Zeichenfolgen, insbesondere wenn die Ersatzregeln mehr als nur einfache Zeichenfolge ersetzt.

Ich hoffe, dieser Artikel kann Ihnen helfen, die Fähigkeiten der Kombination von preg_match_all und preg_replace zu verstehen und zu beherrschen.