Regex pour la chaîne contient?


114

Qu'est-ce que l'expression régulière pour vérifier simplement si une chaîne contient un certain mot (par exemple «Test»)? J'ai fait quelques recherches sur Google, mais je ne peux pas obtenir un exemple clair d'une telle regex. Ceci est pour un script de construction mais n'a aucun rapport avec un langage de programmation particulier.

Réponses:


78

En supposant des saveurs régulières de regex de style PCRE:

Si vous voulez le vérifier en tant que mot unique et complet , il est \bTest\b, avec les indicateurs appropriés pour l'insensibilité à la casse si vous le souhaitez et des délimiteurs pour votre langage de programmation. \breprésente une «limite de mot», c'est-à-dire un point entre les caractères où un mot peut être considéré comme commençant ou se terminant. Par exemple, puisque les espaces sont utilisés pour séparer les mots, il y aura une limite de mot de chaque côté d'un espace.

Si vous voulez le vérifier dans le cadre du mot , c'est juste Test, encore une fois avec les indicateurs appropriés pour l'insensibilité à la casse. Notez que généralement, les méthodes dédiées de "sous-chaîne" ont tendance à être plus rapides dans ce cas, car elles suppriment la surcharge de l'analyse de l'expression régulière.


1
" \breprésente une" limite de mot ", c'est-à-dire quelque chose qui sépare deux mots (par exemple un espace)." \bne correspond pas à un espace; c'est une assertion qui correspond entre les caractères (ou au début ou à la fin d'une ligne, dans la plupart des cas).
strager

1
@strager: Oui, vous avez raison - mon explication était un peu imprécise. Je vais éditer.
Michael Madsen

117

N'ancrez simplement pas votre motif:

/Test/

Le regex ci-dessus vérifiera si la chaîne littérale "Test" se trouve quelque part en son sein.


2
Merci, je ne savais pas que c'était aussi simple! Je n'ai certainement pas vu cela dans mon googling. Qu'entendez-vous par ne pas ancrer mon modèle?
GurdeepS

7
Vous pouvez ancrer un modèle pour qu'il corresponde au début ou à la fin d'une chaîne, par exemple / ^ Test / ou / Test $ / respectivement ou même / ^ Test $ / pour correspondre exactement. L'exemple est stupide car il ne fournit aucun avantage par rapport à la comparaison pour l'égalité, mais par exemple lors de la validation de champ de formulaire, une expression régulière comme / ^ \ d + $ / ne correspondra que si le champ contient au moins un chiffre et rien que des chiffres numériques.
David Clarke

-13

J'ai quelques années de retard, mais pourquoi pas ça?

[Tt][Ee][Ss][Tt]

4
Cette réponse est apparue dans la file d'attente d'examen de faible qualité, probablement parce que vous n'avez pas expliqué le code. Si vous l'expliquez (dans votre réponse), vous êtes beaucoup plus susceptible d'obtenir plus de votes positifs - et l'interlocuteur apprend en fait quelque chose!
The Guy with The Hat

6
Ce n'est pas très généralisable - imaginez si le mot que vous deviez rechercher provenait d'un utilisateur. Vous auriez à générer le [Aa]modèle pour chaque lettre et cela deviendrait assez moche assez rapidement.
Platinum Azure
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.