Comment les limites des mots en PHP gèrent-elles les caractères autres que des mots ?

Mary-Kate Olsen
Libérer: 2024-10-21 07:25:03
original
288 Les gens l'ont consulté

How Do Word Boundaries in PHP Handle Non-Word Characters?

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

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

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!