Mam wyrażenie regularne, którego używam, aby znaleźć wszystkie słowa w danym bloku treści, bez rozróżniania wielkości liter, które są zawarte w glosariuszu przechowywanym w bazie danych. Oto mój wzór:
/($word)/i
Problem polega na tym, że jeśli /(Foo)/i
użyję słów takich jak „ Food
dopasuj”. Po obu stronach słowa musi znajdować się spacja lub granica słowa.
Jak mogę zmodyfikować wyrażenie, aby dopasować tylko słowo, Foo
gdy jest to słowo na początku, w środku lub na końcu zdania?
regex
word-boundary
Aaron
źródło
źródło
\b(<|>=)\b
nie pasuje>=
\b[-|+][0-9]+\b
mecz+10
w43E+10
. Obie nie chcę.Aby dopasować całe słowo, użyjesz wzorca
(\w+)
Zakładając, że używasz PCRE lub czegoś podobnego:
Powyższy zrzut ekranu pochodzi z tego przykładu na żywo: http://regex101.com/r/cU5lC2
Dopasowanie całego słowa w linii poleceń za pomocą
(\w+)
Będę za pomocą phpsh interaktywną powłokę na Ubuntu 12.10 do wykazania silnik PCRE regex za pomocą metody znanej jako preg_match
Uruchom phpsh, umieść treść w zmiennej, dopasuj słowo.
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
Metoda preg_match używany silnik PCRE w języku PHP do analizy zmiennych:
$content1
,$content2
i$content3
ze(\w)+
wzorca.$ content1 i $ content2 zawierają co najmniej jedno słowo, $ content3 nie.
Dopasuj kilka dosłownych słów w wierszu poleceń za pomocą
(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
zmienne gun1 i gun2 zawierają strzałkę lub pierdnięcie. gun4 tego nie robi. Jednak problemem może być szukanie
fart
dopasowań słówfarty
. Aby to naprawić, wymuszaj granice słów w wyrażeniu regularnym.Dopasuj dosłowne słowa w wierszu poleceń z granicami słów.
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
Więc to jest taka sama, jak w poprzednim przykładzie, z wyjątkiem, że słowo
fart
z\b
granicy słowo nie istnieje w treści:farty
.źródło
Używanie
\b
może przynieść zaskakujące rezultaty. Lepiej byłoby dowiedzieć się, co oddziela słowo od jego definicji i uwzględnić tę informację w swoim wzorcu.#!/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"; }
Wynik:
źródło
użyj granic słów \ b,
Następujące (przy użyciu czterech ucieczek) działa w moim środowisku: Mac, Safari w wersji 10.0.3 (12602.4.8)
var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)
źródło
Dla tych, którzy chcą zweryfikować Enum w swoim kodzie, możesz postępować zgodnie z przewodnikiem
W Regex World możesz użyć
^
do rozpoczęcia i$
zakończenia łańcucha . Używanie ich w połączeniu z|
może być tym, czego chcesz:^(Male)$|^(Female)$
Zwróci prawdę tylko dla przypadku
Male
lubFemale
.źródło
^
i$
dopasuj początek (odpowiednio koniec) wiersza, dlatego przykład będzie pasował tylko wtedy, gdy będą to jedyne słowa w wierszu.Jeśli robisz to w Notepad ++
[\w]+
Dałoby ci całe słowo i możesz dodać nawiasy, aby uzyskać je jako grupę. Przykład:
conv1 = Conv2D(64, (3, 3), activation=LeakyReLU(alpha=a), padding='valid', kernel_initializer='he_normal')(inputs)
. Chciałbym przejśćLeakyReLU
do osobnej linii jako komentarz i zastąpić obecną aktywację. W Notatniku ++ można to zrobić za pomocą następującego polecenia find:([\w]+)( = .+)(LeakyReLU.alpha=a.)(.+)
a polecenie zamień staje się:
\1\2'relu'\4 \n # \1 = LeakyReLU\(alpha=a\)\(\1\)
Spacje mają zachować właściwe formatowanie w moim kodzie. :)
źródło
Zbierz wszystkie „słowa” w ciągu
/([^\s]+)/g
źródło