Comment utiliser correctement les limites des mots (\\b) dans les expressions régulières PHP pour une correspondance précise des chaînes ?

Patricia Arquette
Libérer: 2024-10-21 07:23:30
original
1073 Les gens l'ont consulté

How to Correctly Use Word Boundaries (\b) in PHP Regular Expressions for Precise String Matching?

Clarifier les limites des mots d'expression régulière en PHP

Lorsque vous travaillez avec des expressions régulières en PHP, comprendre les limites des mots (b) est crucial pour une chaîne précise correspondant. Ce délimiteur marque la transition entre les caractères de mot (w) et les caractères non-mots (W).

Dans l'exemple fourni, l'intention est de faire correspondre des mots spécifiques, y compris le mot « chat », tout en se demandant s'il commence ou termine un mot. Cependant, les résultats attendus ne sont pas au rendez-vous.

Décomposons la problématique :

Première expression :

preg_match("/(^|\b)@nimal/i", "something@nimal", $match);
Copier après la connexion
  1. Le group (^|b) correspond soit au début de la chaîne, soit à la limite d'un mot.
  2. Dans la chaîne donnée, "quelque chose@nimal", il n'y a pas de caractère de mot avant "@", donc le groupe correspond à un chaîne vide.
  3. Par conséquent, @nimal correspond au "@nimal" suivant, qui inclut le symbole "@".

Deuxième expression :

preg_match("/(^|\b)@nimal/i", "something!@nimal", $match);
Copier après la connexion
  1. Encore une fois, le groupe (^|b) correspond au début de la chaîne ou à une limite de mot.
  2. Dans ce cas, il y a un caractère de mot "g" avant "!", donc le groupe correspond à une chaîne non vide.
  3. Cependant, entre "!" et "@" il n'y a pas de caractère de mot, donc il n'y a pas de limite de mot.
  4. En conséquence, le groupe ne parvient pas à correspondre et aucune correspondance n'est trouvée.

Solution :

Pour résoudre le problème, il est essentiel de comprendre que les limites des mots ne correspondent que lorsqu'il y a une transition d'un caractère verbal à un caractère non verbal. Dans le premier cas, une limite de mot est créée avant "@", tandis que dans le second cas, aucune limite de ce type n'existe entre "!" et "@."

Par conséquent, l'expression correcte pour faire correspondre les mots qui commencent et se terminent par des caractères de mot est :

preg_match("/\b@nimal\b/i", "something@nimal", $match);
Copier après la connexion

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