Maison  >  Article  >  développement back-end  >  Comment les expressions régulières peuvent-elles faire correspondre efficacement des mots entiers dans des chaînes ?

Comment les expressions régulières peuvent-elles faire correspondre efficacement des mots entiers dans des chaînes ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-19 03:53:02650parcourir

How Can Regular Expressions Efficiently Match Whole Words in Strings?

Faire correspondre dynamiquement des mots entiers dans des chaînes à l'aide d'expressions régulières

Pour déterminer si un mot existe dans une phrase, des expressions régulières peuvent être utilisées. Étant donné que les mots sont généralement séparés par des espaces mais peuvent avoir une ponctuation de chaque côté, il est essentiel d'éviter les correspondances partielles de mots.

Une approche consiste à définir des modèles d'expression régulière distincts pour les mots apparaissant au milieu, au début et à la fin de la chaîne comme suit :

match_middle_words = " [^a-zA-Z\d ]{0,}" + word + "[^a-zA-Z\d ]{0,} "
match_starting_word = "^[^a-zA-Z\d]{0,}" + word + "[^a-zA-Z\d ]{0,} "
match_end_word = " [^a-zA-Z\d ]{0,}" + word + "[^a-zA-Z\d]{0,}$"

Cependant, cela nécessite de définir et de combiner plusieurs modèles d'expression régulière. Une approche plus simplifiée consiste à exploiter les limites des mots (b) :

match_string = r'\b' + word + r'\b'

Ce modèle garantit que le mot n'est capturé que lorsqu'il est entouré de caractères autres que des mots. Pour une liste de mots (par exemple, dans la variable « mots »), utilisez :

match_string = r'\b(?:{})\b'.format('|'.join(words))

Cette méthode garantit efficacement la capture de mots entiers sans nécessiter plusieurs modèles.

Remarque sur les limites des mots

Pour les scénarios plus complexes impliquant des mots avec des caractères spéciaux ou dans lesquels les limites des mots diffèrent des espaces, des définitions de limites alternatives peuvent être utilisées. Les limites de mots sans ambiguïté excluent les mots qui commencent/se terminent par des caractères spéciaux :

match_string = r'(?<!\w){}(?!\w)'.format(re.escape(word))

Les limites d'espaces considèrent les espaces et le début/la fin des chaînes comme des limites de mots :

match_string = r'(?<!\S){}(?!\S)'.format(word)

En utilisant ces techniques, la correspondance des mots entiers dans des chaînes peuvent être simplifiés, garantissant des résultats précis et cohérents.

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