Maison > développement back-end > tutoriel php > 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
Libérer: 2024-10-21 07:27:02
original
283 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal