Chcę dopasować wyrażenie regularne do całego słowa.
W poniższym przykładzie Próbuję dopasować s
albo season
ale co mam mecze s
, e
, a
, o
i n
.
[s|season]
Jak dopasować wyrażenie regularne do całego słowa?
regex
expression
word
NMGod
źródło
źródło
(season|s)
zamiast tego.[season]
dopasowuje dowolnys
,e
,a
,o
,n
.Odpowiedzi:
Nawiasy kwadratowe są przeznaczone dla klasy postaci, a ty rzeczywiście próbując dopasować dowolny z:
s
,|
,s
(ponownie)e
,a
,s
(ponownie),o
an
.Zamiast tego użyj nawiasów do grupowania:
lub grupa nieobejmująca:
Uwaga: grupy bez przechwytywania informują silnik, że nie musi przechowywać dopasowania, podczas gdy druga (grupa przechwytująca tak). W przypadku małych rzeczy albo działa, w przypadku rzeczy „ciężkich” możesz najpierw sprawdzić, czy potrzebujesz dopasowania, czy nie. Jeśli tego nie zrobisz, lepiej użyj grupy bez przechwytywania, aby przydzielić więcej pamięci na obliczenia, zamiast przechowywać coś, czego nigdy nie będziesz musiał używać.
źródło
?:
Wewnątrz zgrupowanie akanon-capturing
po prostu mówi, że nie można używać wyrażeń z dopasowane$1
,$2
i tak dalej ... Jeśli chcesz, że wyrażenie nie pasuje, czego potrzebujesz to^
.(?! ... )
insead, czyli(?!s|season)
w tym przypadku.Skorzystaj z tego przykładu na żywo online, aby przetestować swój wzór:
Powyższy zrzut ekranu pochodzi z tego przykładu na żywo: https://regex101.com/r/cU5lC2/1
Dopasowanie całego słowa w linii poleceń.
Będę za pomocą phpsh interaktywną powłokę na Ubuntu 12.10 do wykazania silnik PCRE regex za pomocą metody znanej jako preg_match
Rozpocznij phpsh, umieść zawartość w zmiennej, dopasuj słowo.
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 konkretne słowa w linii poleceń bez granic słów
Zmienne
gun1
igun2
zawierają ciągdart
lubfart
który jest poprawny, ale gun3 zawieradarty
i nadal pasuje, to jest problem. A więc do następnego przykładu.Dopasuj określone słowa w linii poleceń do granic słów:
Granice słów można wymusić
\b
, zobacz:Obraz wizualny Regex uzyskany z http://jex.im/regulex i https://github.com/JexCheng/regulex Przykład:
\b
Twierdzi, że mamy granicę słowa, upewniając „dart” jest dopasowany, ale „darty” nie jest.źródło
Testuję przykłady w js. Najprostsze rozwiązanie - po prostu dodaj słowo, którego potrzebujesz w / /:
Teraz, jeśli potrzebujesz tego konkretnego słowa z granicami, a nie wewnątrz żadnych innych znaków-liter. Używamy znacznika b :
W js mamy również metodę exec (), która zwraca wynik-obiektu. Pomaga fg uzyskać informacje o miejscu / indeksie naszego słowa.
Jeśli potrzebujemy uzyskać wszystkie dopasowane słowa w ciągu / zdaniu / tekście, możemy użyć modyfikatora g (dopasowanie globalne):
Teraz ostatnie - nie potrzebuję jednego konkretnego słowa, ale kilka z nich. Używamy | znak, to znaczy wybór / lub.
źródło
[ ]
definiuje klasę znaków. Więc każda postać, którą tam ustawisz, będzie pasować.[012]
będzie pasować0
lub1
lub2
i[0-2]
zachowuje się tak samo.To, czego chcesz, to grupowanie w celu zdefiniowania instrukcji lub. Użyj
(s|season)
dla swojego problemu.Przy okazji. musisz uważać. Metaznaki w normalnym wyrażeniu regularnym (lub wewnątrz grupy) różnią się od klasy znaków. Klasa postaci jest jak język podrzędny.
[$A]
będzie pasować$
lubA
nic więcej. Nie ma ucieczki za dolara.źródło