Expression régulière correspondant à un mot ou son préfixe
Je veux correspondent à 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 puis-je faire une expression régulière correspondant à un mot entier?
- Utilisation
(season|s)
à la place.[season]
correspond à l'une dess
,e
,a
,o
,n
.
Vous devez vous connecter pour publier un commentaire.
Crochets sont conçus pour une classe de personnage, et que vous êtes en train d'essayer de faire correspondre l'une quelconque des:
s
,|
,s
(encore une fois),e
,a
,s
(encore une fois),o
etn
.Utiliser des parenthèses au lieu de regroupement:
ou de non-capture d'un groupe:
Note: les groupes de capture de dire que le moteur qu'il n'a pas besoin de stocker le match, tandis que l'autre (capture d'un groupe n'). Pour les petites choses, soit des œuvres, pour "heavy duty" trucs, vous pouvez voir d'abord si vous avez besoin de le match ou pas. Si vous n'en avez pas, une meilleure utilisation de la non-groupe de capture d'allouer plus de mémoire pour le calcul, au lieu de les stocker quelque chose que vous n'aurez plus jamais besoin de l'utiliser.
?:
à l'intérieur d'un groupement akanon-capturing
juste dit, que vous ne pouvez pas utiliser les expressions appariées avec$1
,$2
et ainsi de suite... Si vous voulez qu'une expression n'est pas adapté, ce que vous avez besoin est^
.(?! ... )
l'insead, sens(?!s|season)
dans ce cas.Utilisation de ce live en ligne par exemple pour tester votre modèle:
Écran ci-dessus, prises à partir de ce live exemple: https://regex101.com/r/cU5lC2/1
Correspondant à un mot entier sur la ligne de commande.
Je vais être en utilisant la phpsh shell interactif sur Ubuntu 12.10 pour démontrer la Regex PCRE moteur par la méthode connue sous preg_match
Commencer phpsh, mettre un peu de contenu dans une variable, match sur parole.
Le preg_match méthode utilisée, les PCRE moteur dans le langage PHP pour analyser les variables:
$content1
,$content2
et$content3
avec le(\w)+
modèle.$content1 et $contenu2 contiennent au moins un mot, $c3 n'.
Corresponde à une mots sur la ligne de commande, sans mot de bountaries
Variables
gun1
etgun2
contiennent la chaînedart
oufart
ce qui est correct, mais gun3 contientdarty
et toujours matchs de, qui est le problème. Ainsi sur l'exemple suivant.Correspondre à des mots spécifiques sur la ligne de commande, avec des limites de mots:
Mot de Limites peuvent être appariés avec
\b
, voir:Regex Visuelle de l'Image acquise de http://jex.im/regulex et https://github.com/JexCheng/regulex Exemple:
La
\b
affirme que nous avons une limite de mot, faire en sorte de "dart" est adapté, mais "darty" n'est-ce pas.J'ai tester les exemples dans js.
Solution la plus simple - il suffit d'ajouter le mot u besoin à l'intérieur de //:
Maintenant, si u besoin de ce mot spécifique, avec des limites, pas à l'intérieur de tous autres signes-lettres. Nous utilisons b marqueur:
Nous avons également la méthode exec() en js, whichone renvoie l'objet résultat. Il permet de f.g. pour obtenir des informations sur le lieu ou l'indice de notre parole.
Si nous avons besoin d'obtenir tous les mots correspondants dans la chaîne/phrase/texte, nous pouvons utiliser le modificateur g (global de match):
Maintenant le dernier - j'ai besoin de pas 1 mot en particulier, mais certains d'entre eux. Nous utilisons | signe, cela signifie choix/ou.
[ ]
définit une classe de caractère. Ainsi, chaque caractère que vous définissez il, sera à la hauteur.[012]
correspondra0
ou1
ou2
et[0-2]
se comporte de la même.Ce que vous voulez est de groupements de définir un ou de l'instruction. Utilisation
(s|season)
pour votre question.Btw. vous devez vous méfier. Les métacaractères normal regex (ou à l'intérieur d'un groupement) sont différents à partir de la classe de personnage. Une classe de caractères est comme une sous-langue.
[$A]
ne correspondent$
ouA
, rien d'autre. Impossible d'échapper ici pour le dollar.