W języku Java RegEx, jak znaleźć różnicę między .
(kropką) metaznakiem a zwykłą kropką, której używamy w dowolnym zdaniu. Jak obsługiwać tego rodzaju sytuacji dla innych znaków meta zbyt podobne ( *
, +
, \d
, ...)
150
Jeśli chcesz, aby kropka lub inne znaki o specjalnym znaczeniu w wyrażeniach regularnych były zwykłymi znakami, musisz ująć je ukośnikiem odwrotnym. Ponieważ wyrażenia regularne w Javie są zwykłymi ciągami Java, musisz pominąć sam ukośnik odwrotny, więc potrzebujesz dwóch ukośników odwrotnych, np.\\.
Rozwiązania proponowane przez innych członków nie działają dla mnie.
Ale znalazłem to:
aby uniknąć kropki w wyrażeniu regularnym java, napisz
[.]
źródło
\\.
nie zadziałało dla mnie:\.
narzekał, że.
nie trzeba uciekać,\\.
sprawił, że pomyślał, że jest\.
zamiast.
,\\\.
a konstruktor rzucił błąd,[.]
była jedyną rzeczą, która działała.\\.
wewnątrz literału ciągu podaje\.
to, czego potrzebuje wyrażenie regularne, aby kropka była traktowana jako dosłowna kropka zamiast dopasowywania dowolnego znaku.Wyrażenia regularne w stylu Perla (na których w mniejszym lub większym stopniu opiera się mechanizm wyrażeń regularnych Java) traktują następujące znaki jako znaki specjalne:
.^$|*+?()[{\
mają specjalne znaczenie poza klasami postaci,]^-\
mają specjalne znaczenie wewnątrz klas znaków ([...]
).Musisz więc uciec od tych (i tylko tych) symboli w zależności od kontekstu (lub, w przypadku klas postaci, umieścić je w miejscach, w których nie można ich błędnie zinterpretować).
Niepotrzebne ucieczki przed innymi znakami mogą działać, ale niektóre mechanizmy regex potraktują to jako błędy składniowe, na przykład
\_
spowodują błąd w .NET.Niektóre inne prowadzą do fałszywych wyników, na przykład
\<
jest interpretowane jako dosłowne<
w Perlu, ale wegrep
tym oznacza „granica słowa”.Więc napisz
-?\d+\.\d+\$
do meczu1.50$
,-2.00$
itd., A[(){}[\]]
dla klasy znaków, który pasuje do wszystkich rodzajów wsporników / szelki / nawiasach.Jeśli chcesz przekształcić ciąg wejściowy użytkownika w postać bezpieczną dla wyrażeń regularnych, użyj
java.util.regex.Pattern.quote
.Dalsza lektura: blog Jana Goyvaerta RegexGuru o ucieczce przed metaznakami
źródło
Unikaj znaków specjalnych z ukośnikiem odwrotnym.
\.
,\*
,\+
,\\d
, I tak dalej. Jeśli nie masz pewności, możesz pominąć dowolny znak niealfabetyczny, niezależnie od tego, czy jest on specjalny, czy nie. Więcej informacji można znaleźć w javadoc dla java.util.regex.Pattern .źródło
Oto kod, który możesz bezpośrednio skopiować wklej:
A co, jeśli przez pomyłkę pozostaną spacje przed lub po „”. w takich sprawach? Zawsze dobrze jest wziąć pod uwagę również te przestrzenie.
Tutaj \\ s * jest po to, aby wziąć pod uwagę spacje i podać tylko wymagane podzielone ciągi.
źródło
Chciałem dopasować ciąg kończący się na „. *” W tym celu musiałem użyć następującego:
Trochę głupie, jeśli się nad tym zastanowić: D Oto, co to znaczy. Na początku łańcucha może znajdować się dowolny znak zero lub więcej razy, po którym następuje kropka "." po którym następuje gwiazdka (*) na końcu ciągu.
Mam nadzieję, że komuś się to przyda. Dzięki za odwrotny ukośnik dla Fabiana.
źródło
"\\.\\*$"
. Nie musisz dopasowywać początku łańcucha, jeśli nie ma to dla Ciebie znaczenia.Jeśli chcesz zakończyć, sprawdź, czy Twoje zdanie kończy się na „. ”, A następnie dodaj [\. \ ] $ Na końcu wzoru.
źródło
Robię podstawową tablicę w JGrasp i stwierdziłem, że z metodą akcesora dla tablicy char [] [] do użycia („.”) Do umieszczenia pojedynczej kropki.
źródło