<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 这部分内容与文章正文无关,可以是任意PHP代码示例</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">dummyFunction</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"Hello, this is a dummy function."</span></span><span>;
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">dummyFunction</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
<preg_replace_callback_array中常见的正则表达式写法错误有哪些?避免这些坑></p>
<p>在PHP中,<code>preg_replace_callback_array
N'oubliez pas d'ajouter un séparateur à l'expression régulière et de faire correspondre le séparateur avant et après.
De nombreux caractères spéciaux dans les expressions régulières doivent être échappés. Surtout lors de la rédaction des habitués dans des cordes PHP, l'arrière-plan lui-même doit également être échappé, ce qui conduit à une double erreur d'échappement.
</span><span><span class="hljs-variable">$patterns</span></span><span> = [
</span><span><span class="hljs-string">'/\\d+/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// correct,PHPEn chaîne\\Représente un seul\</span></span><span>
</span><span><span class="hljs-string">'/\d+/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// correct,单引号En chaîne\Directement efficace</span></span><span>
</span><span><span class="hljs-string">"/\d+/"</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// correct,双引号En chaîne\dPeut être identifié</span></span><span>
</span><span><span class="hljs-string">"/\d+/"</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// Les erreurs courantes sont écrites comme "/\\d+/" Provoque une défaillance correspondante</span></span><span>
];
Évitez: utilisez des citations simples pour envelopper les expressions régulières, réduire la complexité d'évasion ou distinguer soigneusement les citations doubles et les citations simples.
De nombreux développeurs souhaitent réduire le nombre de groupes lors de l'appariement ou utilisent des groupes nommés, mais pas une écriture standardisée entraînera une défaillance correspondante.
</span><span><span class="hljs-comment">// Groupement non actualisé</span></span><span>
</span><span><span class="hljs-string">'/foo(?:bar)/'</span></span><span> </span><span><span class="hljs-comment">// correct,(?:)Indique le groupement non cappé</span></span><span>
</span><span><span class="hljs-string">'/foo(bar)/'</span></span><span> </span><span><span class="hljs-comment">// Regroupement de capture</span></span><span>
</span><span><span class="hljs-comment">// Groupe de noms,correct写法:</span></span><span>
</span><span><span class="hljs-string">'/foo(?P<name>bar)/'</span></span><span>
</span><span><span class="hljs-comment">// Mauvaise écriture:</span></span><span>
</span><span><span class="hljs-string">'/foo(?<name>bar)/'</span></span><span> </span><span><span class="hljs-comment">// Bien que certainsPHPPrise en charge de la version,Mais pasPCREstandard,Compatibilité possible</span></span><span>
Éviter la méthode: il est recommandé d'utiliser la syntaxe de regroupement nommée standard (? P
Lors de l'écriture de règles complexes, des problèmes de syntaxe tels que l'inadéquation du support et les erreurs dans l'utilisation du quantificateur sont susceptibles de se produire, ce qui entraîne des erreurs directes ou des décalages sur preg_replace_callback_array .
</span><span><span class="hljs-variable">$patterns</span></span><span> = [
</span><span><span class="hljs-string">'/(foo(bar/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// Déliachance du support,Signaler une erreur</span></span><span>
</span><span><span class="hljs-string">'/foo+/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// Utilisation incorrecte des quantificateurs,+ Appliqué dans foo Provoque un sens ambigu</span></span><span>
];
Évitez: utilisez des outils IDE ou en ligne pour vérifier les expressions régulières pour assurer une syntaxe correcte.
Le résultat de correspondance attendu de la fonction de rappel est incompatible avec la définition d'expression régulière, entraînant l'index ou le groupe nommé accessible dans le rappel n'existe pas.
</span><span><span class="hljs-variable">$patterns</span></span><span> = [
</span><span><span class="hljs-string">'/(foo)(bar)/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) {
</span><span><span class="hljs-comment">// $matches[1] Oui foo, $matches[2] Oui bar</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>]; </span><span><span class="hljs-comment">// Indice inexistant,Signaler une erreur</span></span><span>
}
];
Évitez: lors de l'écriture d'un rappel, confirmez le nom ou l'index du groupe de la capture régulière pour éviter l'accès aux éléments non définis.
Par exemple, ignorer le cas, le mode monocturé, le mode multi-ligne, etc., ce qui entraîne le résultat correspondant et ne répond pas aux attentes.
</span><span><span class="hljs-string">'/pattern/i'</span></span><span> </span><span><span class="hljs-comment">// i Indique que le cas est ignoré</span></span><span>
</span><span><span class="hljs-string">'/pattern/s'</span></span><span> </span><span><span class="hljs-comment">// s exprimer . Match Newlines</span></span><span>
</span><span><span class="hljs-comment">// 忘记加修饰符Provoque une défaillance correspondante</span></span><span>
</span><span><span class="hljs-string">'/pattern/'</span></span><span> </span><span><span class="hljs-comment">// sensible aux majuscules et minuscules</span></span><span>
Évitez: ajoutez les modificateurs raisonnablement en fonction de vos besoins.
Lorsque vous utilisez preg_replace_callback_array pour traiter les chaînes, il est crucial d'écrire correctement l'expression régulière. Les erreurs communes incluent les délimiteurs manquants, les erreurs d'échappement, l'écriture de groupement irrégulière, les erreurs de syntaxe, les erreurs de paramètres de rappel et l'ignorance des modificateurs. Développer l'habitude de tester les expressions régulières séparément avant d'écrire, l'utilisation d'outils de débogage pour vérifier le regroupement et la correspondance des résultats peut efficacement éviter ces pièges et améliorer la robustesse du code.
J'espère que cet article vous aidera à éviter les erreurs d'écriture d'expression régulières courantes lors de l'utilisation de preg_replace_callback_array et d'écrire du code PHP plus fiable et plus efficace.