Dévoiler les mystères des limites des mots d'expressions régulières en PHP
Lorsque vous utilisez des expressions régulières pour localiser des mots spécifiques dans un texte, il est souvent souhaitable d'imposer contraintes quant à savoir si le mot spécifié marque le début ou la conclusion d'une unité de mot. Cependant, certains comportements inattendus peuvent survenir lorsque vous tentez d'implémenter cela en utilisant des limites de mots.
Considérez l'expression régulière suivante :
preg_match("/(^|\b)@nimal/i", "something@nimal", $match);
Nous prévoyons que la correspondance échouera car l'expression de regroupement consommera le symbole "@", laissant "nimal" correspondre à "@nimal", ce qui ne devrait pas être le cas. Cependant, dans cet exemple, l'expression de regroupement correspond à une chaîne vide, permettant à "@nimal" de correspondre, ce qui implique que "@" est traité comme faisant partie du mot.
Pour percer ce mystère, il est crucial de comprendre comment les limites des mots en PHP sont déterminées. Une limite de mot (b) représente un point de transition entre un caractère de mot (w) et un caractère autre qu'un mot (W). Pour faire correspondre un mot qui doit commencer au début d'un mot, un caractère de mot supplémentaire doit précéder le mot attendu.
Ainsi, dans le premier exemple :
something@nimal ^^
La correspondance réussit car il y a une limite de mot entre la lettre « g » et le symbole « @ ». Cependant, dans le deuxième cas :
something!@nimal ^^
La correspondance échoue car le "!" et les symboles « @ » sont tous deux des caractères autres que des mots, ne créant aucune limite de mot. Pour remédier à cela, vous pouvez utiliser l'expression régulière suivante :
preg_match("/g\b!@\bn/i", "something!@nimal", $match);
Cette expression nécessite un caractère de mot avant "@" et un caractère de mot après "@", en veillant à ce qu'elle ne corresponde que lorsque "@" apparaît. en un mot.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!