2010-10-04 23 views
18

Mam Java ciąg:wyrażenia regularne Java i znak dolara

String b = "/feedback/com.school.edu.domain.feedback.Review$0/feedbackId"); 

Mam też generowany wzór przeciwko którym chcę, aby dopasować ten ciąg:

String pattern = "/feedback/com.school.edu.domain.feedback.Review$0(.)*"; 

Kiedy mówię b.matches(pattern) zwraca false. Teraz wiem, że znak dolara jest częścią Java RegEx, ale nie wiem jak powinien wyglądać mój wzór. Zakładam, że $ in pattern musi zostać zastąpiony przez kilka znaków escape, ale nie wiem ile. Ten znak $ jest dla mnie ważny, ponieważ pomaga mi rozróżniać elementy na liście (liczby po dolarze) i nie mogę bez niego rezygnować.

+0

Aby być czystym, '$' w wyrażeniu pasuje do końca linii. Twoje wyrażenie regularne będzie pasowało do ciągu, którego pierwsza linia kończy się na 'Recenzja', a następna linia zaczyna się od znaku' 0'. – Amarghosh

+3

@Amarghosh: Nie sądzę. To wyrażenie regularne * nigdy * nie może się dopasować, ponieważ między końcem pierwszej linii a pierwszymi znakami drugiej linii musi występować CR i/lub LF. –

+1

@Tim Oops, masz rację - tęskniłem za tym. Ponieważ nie mogę już edytować komentarza, pozwól, że poproszę ludzi o __wczytanie poprawki Tima do mojego pierwszego komentarza__ – Amarghosh

Odpowiedz

27

Musisz uciec $w regex z back-slash (\), ale jako back-slash jest znakiem ucieczki w ciągów trzeba uciec back-slash sobie.

Będziesz musiał uciec z każdego specjalnego wyrażenia regularnego w ten sam sposób, na przykład z ".".

String pattern = "/feedback/com\\.navteq\\.lcms\\.common\\.domain\\.poi\\.feedback\\.Review\\$0(.)*"; 
6

W regex Java zarówno . i $ są wyjątkowe. Musisz uciec z 2 ukośniki, tj.

"/feedback/com\\.navtag\\.etc\\.Review\\$0(.*)" 

(1 backslash jest na ciąg Java, a 1 jest dla silnika regex).

2

Ucieczka dolara z \

String pattern = 
    "/feedback/com.navteq.lcms.common.domain.poi.feedback.Review\\$0(.)*"; 

Radzę ci również uciec ., . reprezentują dowolną postać.

String pattern = 
    "/feedback/com\\.navteq\\.lcms\\.common\\.domain\\.poi\\.feedback\\.Review\\$0(.)*";