J'ai une expression regex que j'utilise pour trouver tous les mots d'un bloc de contenu donné, insensible à la casse, qui sont contenus dans un glossaire stocké dans une base de données. Voici mon modèle:
/($word)/i
Le problème est que si j'utilise des /(Foo)/i
mots tels Food
que les correspondances. Il doit y avoir des espaces ou une limite de mot des deux côtés du mot.
Comment puis-je modifier mon expression pour qu'elle corresponde uniquement au mot Foo
lorsqu'il s'agit d'un mot au début, au milieu ou à la fin d'une phrase?
regex
word-boundary
Aaron
la source
la source
\b(<|>=)\b
ne correspond pas>=
\b[-|+][0-9]+\b
correspondance+10
dans43E+10
. Je ne veux pas des deux.Pour correspondre à n'importe quel mot entier, vous utiliseriez le modèle
(\w+)
En supposant que vous utilisez PCRE ou quelque chose de similaire:
Capture d'écran ci-dessus tirée de cet exemple en direct: http://regex101.com/r/cU5lC2
Faire correspondre n'importe quel mot entier sur la ligne de commande avec
(\w+)
J'utiliserai le shell interactif phpsh sur Ubuntu 12.10 pour démontrer le moteur d' expression régulière 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.
el@apollo:~/foo$ phpsh php> $content1 = 'badger' php> $content2 = '1234' php> $content3 = '$%^&' php> echo preg_match('(\w+)', $content1); 1 php> echo preg_match('(\w+)', $content2); 1 php> echo preg_match('(\w+)', $content3); 0
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 un certain nombre de mots littéraux sur la ligne de commande avec
(dart|fart)
el@apollo:~/foo$ phpsh php> $gun1 = 'dart gun'; php> $gun2 = 'fart gun'; php> $gun3 = 'farty gun'; php> $gun4 = 'unicorn gun'; php> echo preg_match('(dart|fart)', $gun1); 1 php> echo preg_match('(dart|fart)', $gun2); 1 php> echo preg_match('(dart|fart)', $gun3); 1 php> echo preg_match('(dart|fart)', $gun4); 0
Les variables gun1 et gun2 contiennent la chaîne dart ou fart. gun4 ne le fait pas. Cependant, la recherche de
fart
correspondances de mots peut poser un problèmefarty
. Pour résoudre ce problème, appliquez les limites des mots dans regex.Faites correspondre les mots littéraux sur la ligne de commande avec les limites des mots.
el@apollo:~/foo$ phpsh php> $gun1 = 'dart gun'; php> $gun2 = 'fart gun'; php> $gun3 = 'farty gun'; php> $gun4 = 'unicorn gun'; php> echo preg_match('(\bdart\b|\bfart\b)', $gun1); 1 php> echo preg_match('(\bdart\b|\bfart\b)', $gun2); 1 php> echo preg_match('(\bdart\b|\bfart\b)', $gun3); 0 php> echo preg_match('(\bdart\b|\bfart\b)', $gun4); 0
Il est donc le même que l'exemple précédent , sauf que le mot
fart
avec une\b
limite de mot n'existe pas dans le contenu:farty
.la source
L'utilisation
\b
peut donner des résultats surprenants. Vous feriez mieux de comprendre ce qui sépare un mot de sa définition et d'incorporer cette information dans votre modèle.#!/usr/bin/perl use strict; use warnings; use re 'debug'; my $str = 'S.P.E.C.T.R.E. (Special Executive for Counter-intelligence, Terrorism, Revenge and Extortion) is a fictional global terrorist organisation'; my $word = 'S.P.E.C.T.R.E.'; if ( $str =~ /\b(\Q$word\E)\b/ ) { print $1, "\n"; }
Production:
la source
utiliser des limites de mots \ b,
Ce qui suit (en utilisant quatre échappements) fonctionne dans mon environnement: Mac, Safari Version 10.0.3 (12602.4.8)
var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)
la source
Pour ceux qui veulent valider un Enum dans leur code, vous pouvez suivre le guide
Dans Regex World, vous pouvez utiliser
^
pour démarrer une chaîne et la$
terminer. Les utiliser en combinaison avec|
pourrait être ce que vous voulez:^(Male)$|^(Female)$
Il ne retournera vrai que pour
Male
ouFemale
cas.la source
^
et$
correspond au début (respectivement à la fin) d'une ligne, donc votre exemple ne correspondra que si ce sont les seuls mots de la ligne.Si vous le faites dans Notepad ++
[\w]+
Vous donnerait le mot entier, et vous pouvez ajouter des parenthèses pour l'obtenir en tant que groupe. Exemple:
conv1 = Conv2D(64, (3, 3), activation=LeakyReLU(alpha=a), padding='valid', kernel_initializer='he_normal')(inputs)
. Je voudrais passerLeakyReLU
à sa propre ligne en tant que commentaire, et remplacer l'activation actuelle. Dans notepad ++, cela peut être fait en utilisant la commande suivante:([\w]+)( = .+)(LeakyReLU.alpha=a.)(.+)
et la commande replace devient:
\1\2'relu'\4 \n # \1 = LeakyReLU\(alpha=a\)\(\1\)
Les espaces sont pour garder le bon formatage dans mon code. :)
la source
Récupère tous les "mots" dans une chaîne
/([^\s]+)/g
la source