Jak utworzyć wyrażenie regularne, aby dopasować słowo na początku ciągu. Szukamy dopasowania stop
na początku łańcucha i wszystko może po nim nastąpić.
Na przykład wyrażenie powinno pasować do:
stop
stop random
stopping
Dzięki.
Odpowiedzi:
Jeśli chcesz dopasować tylko linie zaczynające się od stop, użyj
^stop
Jeśli chcesz dopasować linie zaczynające się od słowa stop, po którym następuje spacja
^stop\s
Lub, jeśli chcesz dopasować wiersze zaczynające się od słowa stop, ale po którym następuje spacja lub dowolny inny znak niebędący słowem, którego możesz użyć (pozwala na to twój styl wyrażenia regularnego)
^stop\W
Z drugiej strony poniższy fragment dopasowuje słowo na początku ciągu w większości odmian wyrażenia regularnego (w tych smakach \ w odpowiada przeciwieństwu \ W)
^\w
Jeśli twój smak nie ma skrótu \ w, możesz użyć
^[a-zA-Z0-9]+
Uważaj, ponieważ ten drugi idiom będzie pasował tylko do liter i cyfr, bez żadnego symbolu.
Zapoznaj się z instrukcją obsługi wyrażeń regularnych, aby dowiedzieć się, jakie skróty są dozwolone i do czego dokładnie pasują (i jak radzą sobie z Unicode).
^stop\b
, co pozwoliłoby na jakąkolwiek granicę, w tym koniec linii
Spróbuj tego:
/^stop.*$/
Wyjaśnienie:
Jeśli chcesz wymusić, aby po zatrzymaniu występowały białe znaki, możesz zmodyfikować wyrażenie regularne w następujący sposób:
/^stop\s+.*$/
Uwaga: pamiętaj również, że powyższe wyrażenie RegEx wymaga, aby po słowie pomijanym następowała spacja! Więc nie pasuje do wiersza, który zawiera tylko: stop
Jeśli chcesz dopasować cokolwiek po słowie, zatrzymaj się i nie tylko na początku linii, możesz użyć: \bstop.*\b
- słowo, po którym następuje linia
Lub jeśli chcesz dopasować słowo w ciągu, użyj \bstop[a-zA-Z]*
- tylko słowa zaczynające się od stop
Lub początek linii ze stoperem tylko ^stop[a-zA-Z]*
dla słowa - tylko pierwsze słowo
Cały wiersz ^stop.*
- tylko pierwsza linia ciągu
A jeśli chcesz dopasować każdy ciąg zaczynający się od stop, w tym znaki nowej linii, użyj: /^stop.*/s
- łańcuch wielowierszowy zaczynający się od stop
Jak powiedział @SharadHolani. To nie będzie pasować do każdego słowa zaczynającego się od „ stop ”
. Tylko wtedy, gdy jest na początku linii, w stylu „ przestań jechać ”. @Waxo udzielił poprawnej odpowiedzi:
Ten jest nieco lepiej, jeśli chcesz dopasować żadnego słowa zaczynającego się na „ przystanku ” oraz zawierający jedynie litery od A do Z .
\bstop[a-zA-Z]*\b
To pasowałoby do wszystkich
stop (1)
zatrzymaj losowo (2)
zatrzymywanie (3)
chcę się zatrzymać (4)
proszę przestań (5)
Ale
/^stop[a-zA-Z]*/
będzie pasować tylko (1) do (3), ale nie (4) i (5)
/stop([a-zA-Z])+/
Dopasuje każde słowo pomijane (zatrzymanie, zatrzymanie, zatrzymanie itp.)
Jeśli jednak chcesz po prostu dopasować „stop” na początku ciągu
/^stop/
zrobi: D
Odradzałbym stosowanie prostych wyrażeń regularnych do tego problemu. Jest zbyt wiele słów, które są podciągami innych niepowiązanych słów i prawdopodobnie doprowadzisz się do szaleństwa, próbując przesadnie dostosować już dostarczone prostsze rozwiązania.
Będziesz potrzebował przynajmniej naiwnego algorytmu rymowania (wypróbuj lemmer Portera; w większości języków dostępny jest bezpłatny kod) do przetwarzania tekstu. Przechowuj ten przetworzony tekst i wstępnie przetworzony tekst w dwóch oddzielnych tablicach z podziałem na spacje. Upewnij się, że każdy znak niealfabetyczny również otrzymuje własny indeks w tej tablicy. Niezależnie od listy słów, które filtrujesz, również je powstrzymaj.
Następnym krokiem byłoby znalezienie indeksów tablicowych, które pasują do twojej listy słów „stop” z rdzeniem. Usuń je z nieprzetworzonej tablicy, a następnie dołącz ponownie w spacjach.
Jest to tylko nieco bardziej skomplikowane, ale podejście będzie znacznie bardziej niezawodne. Jeśli masz jakiekolwiek wątpliwości co do wartości podejścia bardziej zorientowanego na NLP, możesz zechcieć trochę zbadać błędy clbuttic .
Jeśli chcesz, aby słowo zaczynało się od „stop”, możesz użyć następującego wzoru. „^ stop. *”
To dopasuje słowa zaczynające się od stop, po którym następuje cokolwiek.
"^stop"
?
code
String line = "stopped";
String pattern = "^stop";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
System.out.println(m.find( )); //prints true
System.out.println(line.matches(pattern)); //prints false