Position actuelle: Accueil> Derniers articles> Syntaxe d'expression régulière Preg_replace: acquérir des compétences de remplacement régulières à partir de zéro

Syntaxe d'expression régulière Preg_replace: acquérir des compétences de remplacement régulières à partir de zéro

gitbox 2025-09-17

Dans PHP, preg_replace () est le "couteau à armée suisse le plus pratique pour le traitement du texte. Il est basé sur le PCRE (expressions régulières compatibles Perl), qui peuvent non seulement faire une recherche et remplacer simples, mais également effectuer des tâches complexes telles que la réécriture structurée, les données de nettoyage et le changement de nom de lots. Cet article commencera à zéro, en se concentrant sur la signature de la fonction, la syntaxe régulière, les scénarios communs et les points clés pour éviter les fosses dans preg_replace () , pour vous aider à maîtriser rapidement les compétences de base du remplacement régulier.

1. Utilisation de base de preg_replace ()

Signature de la fonction:

 <span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
    </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$pattern</span></span><span>,
    </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$replacement</span></span><span>,
    </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$subject</span></span><span>,
    </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$limit</span></span><span> = -</span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-keyword">int</span></span><span> &amp;</span><span><span class="hljs-variable">$count</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>
)
</span></span>
  • $ Pattern : Expression régulière (peut être un tableau, représentant plusieurs règles)

  • $ Remplacement : remplacer le contenu (peut être un tableau, correspondant au modèle un par un)

  • $ Sujet : String en attente (ou tableau de chaînes)

  • $ limite : limite supérieure des temps de remplacement (par défaut -1 signifie aucune limite)

  • $ Count : Paramètre de sortie, renvoyez le nombre réel de remplacements

Exemple minimum:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Color or Colour? I like the color blue."</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/colou?r/i'</span></span><span>, </span><span><span class="hljs-string">'color'</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>, -</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$count</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// Color or color? I like the color blue.</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> PHP_EOL . </span><span><span class="hljs-string">"Replaced: <span class="hljs-subst">$count</span></span></span><span>"; </span><span><span class="hljs-comment">// Replaced: 2</span></span><span>
</span></span>

/ Colou? R / I : ? Laissez le U précédent en facultatif; Le modificateur I ignore la partie supérieure et les minuscules.

2. séparateur et modificateur

2.1 délimiteurs

Les délimiteurs communs incluent / # ~% {} () et ainsi de suite. Le choix le plus sans souci est de choisir un séparateur qui n'en est pas en conflit avec le modèle:

 <span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'#https?://[^\s]+#'</span></span><span>, </span><span><span class="hljs-string">'[link]'</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span></span>

Lorsqu'il y a un grand nombre de / en mode, l'utilisation de # peut éviter un grand nombre d'évasions.

2.2 Modificateurs communs

  • I : Ignorer le cas

  • M : Mode multi-lignes ( ^ et $ correspondra au début / fin de chaque ligne)

  • S : Modèle unique ( . correspond également à Newlines)

  • U : Appuyez sur UTF-8 pour traiter (fortement recommandé pour les scénarios chinois / emoji)

  • X : ignorer les blancs et les commentaires dans le mode (meilleure lisibilité)

  • U : Inversion du quantificateur paresseux (changer le quantificateur de la cupidité à la paresse par défaut)

Exemple (plusieurs lignes + lignes simples):

 <span><span><span class="hljs-variable">$log</span></span><span> = </span><span><span class="hljs-string">"ID:42\nPayload:\n{\n  \"a\":1\n}\nEnd"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/^Payload:(.*)End$/ims'</span></span><span>, </span><span><span class="hljs-string">'[DATA HIDDEN]'</span></span><span>, </span><span><span class="hljs-variable">$log</span></span><span>);
</span></span>

3. Commencez rapidement avec des métacharacteurs et des quantificateurs

  • Classes de caractères: [ABC] , [^ ABC] , \ d Number, \ w Word Characters, \ S Blank

  • Position Anchor: ^ Début de ligne, $ Line End, \ b Boundaire du mot

  • Quantificateurs: * (0+), + (1+) , ? (0/1), {m, n} (plage)

  • Greed / Lazy: + est la cupidité, +? est la paresse (correspond aussi peu que possible)

Exemple (masque de boîte aux lettres):

 <span><span><span class="hljs-variable">$email</span></span><span> = </span><span><span class="hljs-string">'[email protected]'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?&lt;=.).+?(?=@)/'</span></span><span>, </span><span><span class="hljs-string">'***'</span></span><span>, </span><span><span class="hljs-variable">$email</span></span><span>);
</span><span><span class="hljs-comment">// a***@example.com</span></span><span>
</span></span>

Utilisez avant et après la recherche (? <= ...) et (? = ...) Pour localiser avec précision la plage de remplacement pour éviter de capturer des caractères inutiles.

4. GRASSION DE CAPTURE ET DES FORTS

  • Capture Grouping : (...) Économisera le contenu correspondant à 1 $, 2 $, ... (utilisé dans la chaîne de remplacement)

  • Groupement non capturé : (?: ...) Le groupe n'est pas enregistré, de meilleures performances

Exemple (Formatage des noms: Zhang San-Li SiZhang San & Li Si ):

 <span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">'Zhang San-Li si'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/^(\S+)\s*-\s*(\S+)$/u'</span></span><span>, </span><span><span class="hljs-string">'$1 &amp; $2'</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>);
</span><span><span class="hljs-comment">// Zhang San &amp; Li si</span></span><span>
</span></span>

Exemple (normalisation de l'URL: http://example.com/path → nom de domaine minuscule):

 <span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">'HTTP://EXAMPLE.COM/Path'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/^(https?):\/\/([^\/]+)/ie'</span></span><span>, </span><span><span class="hljs-string">"'<span class="hljs-subst">$1</span></span></span><span>://'.strtolower('</span><span><span class="hljs-subst">$2</span></span><span>')", </span><span><span class="hljs-variable">$url</span></span><span>);
</span></span>

?? Le modificateur / E peut apparaître dans Old Code ( obsolète ) et ne pas l'utiliser. Veuillez utiliser le rappel à la place (voir la section suivante).

5. Utilisez des rappels pour effectuer "Smart Replacement": preg_replace_callback ()

Lorsque la valeur de remplacement doit être calculée (comme la conversion de cas, la numérotation dynamique, le jugement conditionnel), il est plus sûr d'utiliser des rappels:

 <span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"HTTP://EXAMPLE.COM/Path and http://MiXeD.com/Another"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(
    </span><span><span class="hljs-string">'#\bhttps?://([^/\s]+)#i'</span></span><span>,
    function (</span><span><span class="hljs-variable">$m</span></span><span>) {
        </span><span><span class="hljs-comment">// $m[0] C&#39;est tout le match,$m[1] C&#39;est un nom de domaine</span></span><span>
        </span><span><span class="hljs-variable">$scheme</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stripos</span></span><span>(</span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>], </span><span><span class="hljs-string">'https://'</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span> ? </span><span><span class="hljs-string">'https://'</span></span><span> : </span><span><span class="hljs-string">'http://'</span></span><span>;
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$scheme</span></span><span> . </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>]);
    },
    </span><span><span class="hljs-variable">$input</span></span><span>
);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
</span><span><span class="hljs-comment">// http://example.com/Path and http://mixed.com/Another</span></span><span>
</span></span>

Il existe également une fonction sœur adaptée au traitement de grandes quantités de données: preg_replace_callback_array () , qui peut enregistrer plusieurs règles et rappels à la fois:

 <span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Price: 19.99 USD, Date: 2025-08-25"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback_array</span></span><span>([
    </span><span><span class="hljs-string">'/\b(\d+(?:\.\d{2})?)\s*USD\b/'</span></span><span> =&gt; fn(</span><span><span class="hljs-variable">$m</span></span><span>) =&gt; </span><span><span class="hljs-string">'$'</span></span><span> . </span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>],
    </span><span><span class="hljs-string">'/\b(\d{4})-(\d{2})-(\d{2})\b/'</span></span><span>  =&gt; </span><span><span class="hljs-function"><span class="hljs-keyword">fn</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$m</span></span></span><span>) =&gt; </span><span><span class="hljs-string">"<span class="hljs-subst">{$m[2]}</span></span></span><span>/</span><span><span class="hljs-subst">{$m[3]}</span></span><span>/</span><span><span class="hljs-subst">{$m[1]}</span></span><span>",
], </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// Price: $19.99, Date: 08/25/2025</span></span><span>
</span></span>

6. Remplacement par lot multi-règles

Les tableaux de support de modèle $ et $ de remplacement . Si la valeur de remplacement ne correspond pas une par une, la même valeur de remplacement sera appliquée à chaque mode:

 <span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"foo 123 bar 456 baz"</span></span><span>;
</span><span><span class="hljs-variable">$patterns</span></span><span> = [</span><span><span class="hljs-string">'/\bfoo\b/'</span></span><span>, </span><span><span class="hljs-string">'/\d+/'</span></span><span>, </span><span><span class="hljs-string">'/\bbaz\b/'</span></span><span>];
</span><span><span class="hljs-variable">$replacements</span></span><span> = [</span><span><span class="hljs-string">'FOO'</span></span><span>, </span><span><span class="hljs-string">'[NUM]'</span></span><span>, </span><span><span class="hljs-string">'BAZ'</span></span><span>];
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-variable">$patterns</span></span><span>, </span><span><span class="hljs-variable">$replacements</span></span><span>, </span><span><span class="hljs-variable">$input</span></span><span>);
</span><span><span class="hljs-comment">// FOO [NUM] bar [NUM] BAZ</span></span><span>
</span></span>

7. Unicode / Chinois et Boundary Problèmes

Il est recommandé d'ajouter un modificateur U par défaut pour éviter de briser les caractères multi-gytets.

  • La frontière du participe chinois est-elle disponible \ b ? Peu fiable. \ b est la "limite du mot", qui s'adresse aux caractères de mot ASCII; Lorsque vous traitez avec les limites chinoises, veuillez utiliser des classes de caractères claires ou avant et après la recherche .

Exemple (ajouter de l'espace entre le chinois et les nombres):

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Version2Publié dans2025Année8lune25jour"</span></span><span>;
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?&lt;=[\x{4e00}-\x{9fa5}])(?=\d)/u'</span></span><span>, </span><span><span class="hljs-string">' '</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?&lt;=\d)(?=[\x{4e00}-\x{9fa5}])/u'</span></span><span>, </span><span><span class="hljs-string">' '</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>; </span><span><span class="hljs-comment">// Version 2 Publié dans 2025 Année 8 lune 25 jour</span></span><span>
</span></span>

\ x {4e00} - \ x {9fa5} est un intervalle de caractères chinois couramment utilisé, n'oubliez pas d'ajouter u .

8. Combat réel dans les scénarios de remplacement communs

8.1 Nettoyage HTML (veillez à ne pas écrire le marteau qui "analyse HTML")

Objectif : Supprimez toutes les balises et ne gardez que du texte brut.

 <span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"&lt;p&gt;Hello &lt;strong&gt;world&lt;/strong&gt; &amp;copy; 2025&lt;/p&gt;"</span></span><span>;
</span><span><span class="hljs-variable">$plain</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/&lt;[^&gt;]+&gt;/'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$html</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$plain</span></span><span>; </span><span><span class="hljs-comment">// Hello world ? 2025</span></span><span>
</span></span>

Le nettoyage simple est ok; Veuillez utiliser DOM pour rendre les structures HTML complexes robustes.

8.2 désensibilisation au numéro de téléphone / carte

 <span><span><span class="hljs-variable">$phone</span></span><span> = </span><span><span class="hljs-string">"13812345678"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(\d{3})\d{4}(\d{4})/'</span></span><span>, </span><span><span class="hljs-string">'$1****$2'</span></span><span>, </span><span><span class="hljs-variable">$phone</span></span><span>);
</span><span><span class="hljs-comment">// 138****5678</span></span><span>
</span></span>

8.3 Remplacement de l'espace réservé à la variable par lots (syntaxe de l'attelle)

 <span><span><span class="hljs-variable">$template</span></span><span> = </span><span><span class="hljs-string">"Hi {name}, your order {id} is {status}."</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">42</span></span><span>, </span><span><span class="hljs-string">'status'</span></span><span> =&gt; </span><span><span class="hljs-string">'shipped'</span></span><span>];

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-string">'/\{(\w+)\}/'</span></span><span>, function(</span><span><span class="hljs-variable">$m</span></span><span>) </span><span><span class="hljs-keyword">use</span></span><span> ($</span><span><span class="hljs-title">data</span></span><span>) {
    </span><span><span class="hljs-title">return</span></span><span> $</span><span><span class="hljs-title">data</span></span><span>[$</span><span><span class="hljs-title">m</span></span><span>[1]] ?? $</span><span><span class="hljs-title">m</span></span><span>[0];
}, </span><span><span class="hljs-variable">$template</span></span><span>);
</span><span><span class="hljs-comment">// Hi Alice, your order 42 is shipped.</span></span><span>
</span></span>

8.4 Image de marque à HTML <MG>

 <span><span><span class="hljs-variable">$md</span></span><span> = </span><span><span class="hljs-string">'![alt text](/img/logo.png "Title")'</span></span><span>;
</span><span><span class="hljs-variable">$img</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
    </span><span><span class="hljs-string">'/!\[([^\]]*)\]\((\S+)(?:\s+"([^"]*)")?\)/'</span></span><span>,
    </span><span><span class="hljs-string">'&lt;img src="$2" alt="$1" title="$3"&gt;'</span></span><span>,
    </span><span><span class="hljs-variable">$md</span></span><span>
);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$img</span></span><span>;
</span><span><span class="hljs-comment">// &lt;img src="/img/logo.png" alt="alt text" title="Title"&gt;</span></span><span>
</span></span>

8,5 blancs et points de ponctuation standardisés

 <span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Hello,world!   PHP\tis\ngreat."</span></span><span>;
</span><span><span class="hljs-comment">// Comprimer des espaces blancs continus qui ne sont pas divisés en un seul espace</span></span><span>
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^\S\r\n]+/'</span></span><span>, </span><span><span class="hljs-string">' '</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-comment">// Remplacez la virgule chinoise par la virgule anglaise et ajoutez des espaces</span></span><span>
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/,/u'</span></span><span>, </span><span><span class="hljs-string">', '</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$text</span></span><span>; </span><span><span class="hljs-comment">// Hello, world! PHP is great.</span></span><span>
</span></span>

8.6 Extraction et réorganisation (réarrangement du champ journal)

 <span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-string">'2025-08-25 14:03:22 [INFO] user=alice ip=203.0.113.9'</span></span><span>;
</span><span><span class="hljs-variable">$fmt</span></span><span>  = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
    </span><span><span class="hljs-string">'/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) \[(\w+)\] user=(\w+) ip=([\d.]+)$/'</span></span><span>,
    </span><span><span class="hljs-string">'[$3][$1T$2Z] $4@$5'</span></span><span>,
    </span><span><span class="hljs-variable">$line</span></span><span>
);
</span><span><span class="hljs-comment">// [INFO][2025-08-25T14:03:22Z] [email protected]</span></span><span>
</span></span>

9. Recommandations de performance et de fiabilité

  1. La priorité est spécifique et post-généralisation : les classes de caractères doivent être aussi étroites que possible à éviter . * Abus. Si nécessaire, utilisez des quantificateurs paresseux ou recherchez avant et après.

  2. Évitez le retour en arrière catastrophique : des structures telles que (. +) + , (. *) {M,} dans le mode sont extrêmement explosives; Si vous pouvez clarifier les limites, n'utilisez pas "Snake".

  3. Utilisez le modificateur U : lorsque le texte contient des caractères multi -yte (chinois / emoji), il faut ajouter, sinon les caractères peuvent être détruits.

  4. Rappel au lieu de / e : tout remplacement qui doit être calculé sera utilisé avec preg_replace_callback () , ce qui est plus sûr.

  5. CONTRÔLE $ LIMIT : Lorsque vous souhaitez simplement remplacer le premier match, définissez $ limite à 1 .

  6. Statistiques et tests : Utilisez le nombre de dollars pour percevoir le nombre de remplacements; Écrivez des tests unitaires pour les modèles clés pour couvrir les cas d'utilisation des limites.

  7. Précompilation / cache : PHP a un certain cache pour PCRE en interne; Mais sur les chemins à haute fréquence, essayez d'éviter de construire des modes variables en boucles.

10. Correction d'erreur et débogage

  • Minimiser la reproduction : démontez le mode long et vérifiez-le segment par segment.

  • Lisibilité : utilisez le modificateur x pour écrire le modèle "annoté":

 <span><span><span class="hljs-variable">$pattern</span></span><span> = <span class="hljs-string">'/
    ^\s*              # Vide autorisé au début
    (?P&lt;key&gt;\w+)      # clé
    \s*=\s*
    (?P&lt;val&gt;.+?)      # valeur(Inerte)
    \s*$
/x'</span>;
</span></span>
  • Conscience d'évasion : Dans les chaînes de PHP, l'évasion doit être considérée deux fois (par exemple, la différence entre "\ d" et \\ d ).

11. Liste des "épées" couramment utilisées

  • Remplacer uniquement la première correspondance : preg_replace ($ p, $ r, $ s, 1, $ count);

  • Supprimez en toute sécurité les balises de script : preg_replace ('# <script \ b [^>] *>. *? </ Script> #is', '', $ html);

  • Renommer les paramètres de la requête dans URL : Match ([? &]) Old = ([^ & #] *)$ 1NEW = 2 $

  • Insérer une virgule dans un millième de valeur (valeur simple): preg_replace ('/ \ b (? = (\ D {3}) + (?! \ D)) /', ',', $ n);

  • Excès de compression des lignes vierges : preg_replace ('/ (\ r) \ s * (\ r) /', "$ $ $ 2", $ text);

  • Supprimez les caractères invisibles : preg_replace ('/ [\ x00- \ x1f \ x7f] /', '', $ s);

  • Hump ​​transforme le soulignement : preg_replace ('/ (? <! ^) [Az] /', '_ 0 $', $ camel);

12. Exemple complet: désensibilisation logarithmique + sortie structurée

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$log</span></span><span> = <span class="hljs-string">&lt;&lt;&lt;LOG
[2025-08-25 10:00:01] user=john phone=13812345678 [email protected]
[2025-08-25 10:05:09] user=Forêt phone=13987654321 [email protected]
LOG</span>;

</span><span><span class="hljs-comment">// 1) Désensibilisation de base:Quatre personnes au milieu du numéro de téléphone mobile peuvent jouer des étoiles、Seul le premier caractère du nom d&#39;utilisateur de messagerie</span></span><span>
</span><span><span class="hljs-variable">$log</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(\b1\d{2})\d{4}(\d{4}\b)/'</span></span><span>, </span><span><span class="hljs-string">'$1****$2'</span></span><span>, </span><span><span class="hljs-variable">$log</span></span><span>);
</span><span><span class="hljs-variable">$log</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?&lt;=\b)[A-Za-z0-9._%+-](?:[A-Za-z0-9._%+-]?)+(?=@)/'</span></span><span>, </span><span><span class="hljs-string">'*'</span></span><span>, </span><span><span class="hljs-variable">$log</span></span><span>);

</span><span><span class="hljs-comment">// 2) Réécriture structurée:Se convertir CSV D&#39;ACCORD</span></span><span>
</span><span><span class="hljs-variable">$csv</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
    </span><span><span class="hljs-string">'/^\[(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})\]\s+user=([^\s]+)\s+phone=([^\s]+)\s+email=([^\s]+)$/mu'</span></span><span>,
    </span><span><span class="hljs-string">'$1,$2,$3,$4,$5'</span></span><span>,
    </span><span><span class="hljs-variable">$log</span></span><span>
);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$csv</span></span><span>;
<span class="hljs-comment">/*
2025-08-25,10:00:01,john,138****5678,j*</span></span><span><span class="hljs-doctag">@example</span></span><span>.com
2025-08-25,10:05:09,Forêt,139****4321,l*</span><span><span class="hljs-doctag">@example</span></span><span>.cn
*/
</span></span>

Conclusion

La puissance de preg_replace () réside dans " Décrire précisément le modèle que vous recherchez et le réécrivez à ce à quoi vous devez ressembler". En saisissant les séparateurs et les modificateurs, en faisant bon usage de la capture de regroupements et des recherches à l'avant et à l'utilisation de rappels lorsque le calcul est nécessaire, vous pouvez facilement effectuer diverses tâches de texte du nettoyage à la réécriture dans le développement quotidien. Écrivez plus de petits exemples et effectuez plus de tests de frontières, et la régularité passera de la "magie noire" à un outil quotidien pratique.