2015-10-22 17 views
7

Mam wzorek, używając^i $, aby wskazać początek i koniec linii.

Pattern pattern = Pattern.compile("^Key2 = (.+)$"); 

i wejście tak:

String text = "Key1 = Twas brillig, and the slithy toves" 
    + "\nKey2 = Did gyre and gimble in the wabe." 
    + "\nKey3 = All mimsy were the borogroves." 
    + "\nKey4 = And the mome raths outgrabe."; 

Ale pattern.matcher(text).find() powraca false.

Czy to nie działa? W Pattern class documentation, podsumowanie określa:

 
Boundary matchers 
^ The beginning of a line 
$ The end of a line 

Odpowiedz

9

Domyślnie te symbole dopasować początek i koniec sekwencji cały wejściowego.

Dalej w tym same Pattern class documentation (z podkreślenie dodane):

Domyślnie wyrażenia regularne^i $ ignorować terminatory linii i tylko mecz na początku i na końcu, odpowiednio, całego wejścia sekwencja. Jeśli tryb MULTILINE jest włączony, to^dopasowuje się na początku wejścia i po dowolnym zakończeniu linii, z wyjątkiem końca sygnału wejściowego. W trybie MULTILINE $ dopasowuje się tuż przed zakończeniem linii lub końcem sekwencji wejściowej.

Więc można zrobić^i $ pracę, ponieważ są one udokumentowane w tabeli podsumowania kompilując wzór z Pattern.MULTILINE:

Pattern pattern = Pattern.compile("^Key2 = (.+)$", Pattern.MULTILINE); 
+0

fantastyczna :) I zmagali się z tym w ubiegłym – AbtPst

+1

@AbtPst - Ja również. Szczegóły w javadoc są pochowane; streszczenie może posłużyć się krótkim wyjaśnieniem. Napotkałem, rozwiązałem i zapomniałem to wiele razy przez te wszystkie lata. Następnym razem będzie to pytanie stackoverflow! –

Powiązane problemy