Maison  >  Article  >  développement back-end  >  Quand les limites des mots apparaissent-elles dans les expressions régulières PHP ?

Quand les limites des mots apparaissent-elles dans les expressions régulières PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-21 07:27:02157parcourir

When Do Word Boundaries Occur in PHP Regular Expressions?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn