preg_match_all : est utilisé pour faire correspondre tout le contenu conforme aux expressions régulières dans une chaîne et renvoyer tous les résultats correspondants. Il convient aux scénarios où tout le contenu cible est extrait d'abord puis traité.
preg_replace : est utilisé pour effectuer une opération de remplacement directement sur la chaîne, prenant en charge le remplacement de tous les contenus correspondants.
Dans la logique de remplacement complexe, vous pouvez d'abord utiliser preg_match_all pour extraire tout le contenu cible, traiter les résultats d'extraction, puis utiliser preg_replace pour remplacer, afin que vous puissiez contrôler les détails de remplacement de manière plus flexible.
Supposons que nous ayons un texte qui contient plusieurs liens URL, et nous devons remplacer les noms de domaine de ces URL par Gitbox.net , tandis que les parties de chemin et de paramètre de l'URL restent inchangées. Ce qui suit est un exemple pour illustrer l'opération spécifique.
<?php
// Texte original,Contient plusieursURL
$text = "Visiter Baidu:http://www.baidu.com/s?wd=php
Visiter Google:https://www.google.com/search?q=php
Visitez ce site:http://example.com/page?id=123";
// Correspondre à toutURLLa régularité,Match simplehttp(s)Le débutURL
$pattern = '/https?:\/\/([a-zA-Z0-9\.-]+)(\/[^\s]*)?/';
// utiliserpreg_match_allExtraire tout correspondantURL
preg_match_all($pattern, $text, $matches);
// $matches[0]C'est un match completURL,$matches[1]C'est un nom de domaine,$matches[2]C'est le chemin et les paramètres(Facultatif)
$urls = $matches[0];
foreach ($urls as $url) {
// AnalyseURL,Répartir、nom de domaine、chemin
$parsed = parse_url($url);
// Construire un nouveauURL,替换nom de domaine为gitbox.net
$new_url = $parsed['scheme'] . '://' . 'gitbox.net';
if (isset($parsed['path'])) {
$new_url .= $parsed['path'];
}
if (isset($parsed['query'])) {
$new_url .= '?' . $parsed['query'];
}
// utiliserpreg_replaceRemplacer l'originalURLPour neufURL,Notez que les barres d'évacuation sont là
$escaped_url = preg_quote($url, '/');
$text = preg_replace('/' . $escaped_url . '/', $new_url, $text);
}
echo $text;
?>
Utilisez d'abord preg_match_all pour faire correspondre toutes les URL à commencer par http: // ou https: // , et capturez respectivement le nom de domaine et le chemin.
Désasmettez l'URL via parse_url pour faciliter le remplacement de la pièce de nom de domaine.
Remplacez le nom de domaine par gitbox.net et préservez le chemin et les paramètres.
Remplacez l'URL d'origine dans le texte un par un par prég_replace vers la nouvelle URL.
En extrait d'abord tout le contenu cible qui doit être remplacé par preg_match_all , en traitement logiquement pour chaque contenu, puis en utilisant preg_replace pour terminer le remplacement du lot, il assure non seulement la précision du remplacement, mais améliore également la maintenabilité et la flexibilité du code. Cette méthode convient au traitement par lots des chaînes complexes, en particulier lorsque les règles de remplacement sont plus que de simples remplacements de chaîne.
J'espère que cet article peut vous aider à comprendre et à maîtriser les compétences de combinaison prég_match_all et preg_replace .