Sémantique des limites de mots dans les expressions régulières PHP
En PHP, les limites de mots sont implémentées à l'aide du métacaractère b, qui correspond aux transitions entre les caractères des mots ( w) et des caractères autres que des mots (W). Cependant, son comportement peut être nuancé, comme en témoignent les cas de test que vous avez fournis.
Limites de mots inattendues
Dans vos cas de test, vous vous attendiez aux résultats suivants :
preg_match("/(^|\b)@nimal/i", "something@nimal", $match); // false preg_match("/(^|\b)@nimal/i", "something!@nimal", $match); // true
Mais les résultats réels ont été inversés :
preg_match("/(^|\b)@nimal/i", "something@nimal", $match); // true preg_match("/(^|\b)@nimal/i", "something!@nimal", $match); // false
Cette anomalie se produit parce que le métacaractère b correspond à la transition d'un caractère de mot (w) à un caractère non-verbal (W) . Dans le premier cas, « quelque chose@nimal », la limite de mot se situe entre « g » (un caractère de mot) et « @ » (un caractère autre qu'un mot), conduisant à une correspondance. Cependant, dans le deuxième cas, « quelque chose ! @nimal », il n'y a pas de limite de mots entre « ! » et "@" car les deux ne sont pas des caractères de mots.
Correspondance des débuts de mots
Pour faire correspondre les mots qui commencent par une séquence spécifique, vous devez vous assurer qu'il y a une limite de mot (b) avant votre séquence cible. Par exemple, pour faire correspondre les mots commençant par « @nimal », vous utiliserez l'expression régulière suivante :
preg_match("/(\b)@nimal/i", "something@nimal", $match); // true preg_match("/(\b)@nimal/i", "something!@nimal", $match); // false
Dans cette expression régulière, la limite du mot (b) garantira qu'il y a une transition à partir d'un caractère de mot à un caractère autre qu'un mot avant "@nimal". Cela correspondra aux mots commençant par « @nimal », mais pas aux mots comportant « @nimal » au milieu, tels que « ducat ».
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!