Je veux faire correspondre une expression régulière sur un mot entier.
Dans l'exemple suivant , je suis en train de faire correspondre s
ou , season
mais ce que j'ai matchs s
, e
, a
, o
et n
.
[s|season]
Comment faire correspondre une expression régulière à un mot entier?
regex
expression
word
NMGod
la source
la source
(season|s)
plutôt.[season]
correspond à l' unes
,e
,a
,o
,n
.Réponses:
Les crochets sont destinés à la classe de caractères, et vous êtes en train d' essayer de faire correspondre l'une des:
s
,|
,s
(encore une fois),e
,a
,s
(encore une fois),o
etn
.Utilisez plutôt des parenthèses pour le regroupement:
ou groupe non capturant:
Remarque: les groupes sans capture indiquent au moteur qu'il n'a pas besoin de stocker la correspondance, tandis que l'autre (le groupe de capture le fait). Pour les petits trucs, les travaux, pour les trucs «lourds», vous voudrez peut-être voir d'abord si vous avez besoin du match ou non. Si vous ne le faites pas, mieux vaut utiliser le groupe non-capture pour allouer plus de mémoire pour le calcul au lieu de stocker quelque chose que vous n'aurez jamais besoin d'utiliser.
la source
?:
intérieur d'un groupement ditnon-capturing
simplement que vous ne pouvez pas utiliser les expressions correspondantes avec$1
,$2
et ainsi de suite ... Si vous voulez qu'une expression ne corresponde pas, ce dont vous avez besoin est^
.(?! ... )
insead, c'est-(?!s|season)
à- dire dans ce cas.Utilisez cet exemple en ligne en direct pour tester votre modèle:
Capture d'écran ci-dessus tirée de cet exemple en direct: https://regex101.com/r/cU5lC2/1
Correspondant à n'importe quel mot entier sur la ligne de commande.
J'utiliserai le shell interactif phpsh sur Ubuntu 12.10 pour démontrer le moteur regex PCRE via la méthode connue sous le nom de preg_match
Démarrez phpsh, mettez du contenu dans une variable, faites correspondre le mot.
La méthode de preg_match utilisé le moteur de PCRE dans le langage PHP pour analyser les variables:
$content1
,$content2
et$content3
avec le(\w)+
motif.$ content1 et $ content2 contiennent au moins un mot, $ content3 n'en contient pas.
Faites correspondre des mots spécifiques sur la ligne de commande sans primes de mots
Les variables
gun1
etgun2
contiennent la chaînedart
oufart
qui est correcte, mais gun3 contientdarty
et correspond toujours, c'est le problème. Donc, sur l'exemple suivant.Faites correspondre des mots spécifiques sur la ligne de commande avec les limites des mots:
Les limites de mots peuvent être forcées
\b
, voir:Image visuelle Regex acquise à partir de http://jex.im/regulex et https://github.com/JexCheng/regulex Exemple:
L'
\b
affirmation que nous avons une limite de mot, en s'assurant que "dart" correspond, mais "darty" ne l'est pas.la source
Je teste des exemples en js. Solution la plus simple - ajoutez simplement le mot dont vous avez besoin à l'intérieur / /:
Maintenant, si vous avez besoin de ce mot spécifique avec des limites, pas à l'intérieur d'autres signes-lettres. Nous utilisons le marqueur b :
Nous avons également la méthode exec () dans js, qui renvoie le résultat objet. Cela aide fg à obtenir des informations sur le lieu / l'index de notre mot.
Si nous avons besoin d'obtenir tous les mots correspondants dans chaîne / phrase / texte, nous pouvons utiliser le modificateur g (correspondance globale):
Maintenant le dernier - je n'ai pas besoin d'un mot spécifique, mais de certains d'entre eux. Nous utilisons | signe, cela signifie choix / ou.
la source
[ ]
définit une classe de caractères. Ainsi, chaque caractère que vous définissez ici correspondra.[012]
correspondra à0
ou1
ou2
et[0-2]
se comportera de la même manière.Ce que vous voulez, ce sont des regroupements pour définir une instruction or. Utilisez
(s|season)
pour votre problème.Btw. vous devez faire attention. Les métacaractères dans une expression régulière normale (ou à l'intérieur d'un groupement) sont différents de la classe de caractères. Une classe de caractères est comme un sous-langage.
[$A]
ne correspondra qu'à$
ouA
rien d'autre. Pas d'échappatoire ici pour le dollar.la source