[Java-Regex] Pattern ignorowanie znaków specjalnych


(Angelo7) #1

Witam,

Wykorzystuje Pattern do przeszukiwania Stringa. Pattern jest tworzony dynamicznie i jego przykładowa postać to:

$BOOL cos tam cos

cokolwiek^

$BOOL cos cos

Jak widać posiada on znaki specjalne typu ^, oraz $. Dodatkowo jest to typ multiline. Moje pytanie brzmi: Czy istnieje sposób przy użyciu Patternu i matchera dopasowanie takiego patternu, bez zmiany patternu. Inaczej mówiąc, czy da się dopasowywać tekst dosłownie ignorując wszelkie znaki specjalne?

Ewentualnie może ktoś zna jakiś inny sposób znalezienia konkretnego kawałka stringa w jakimś innym stringu. Zakładając, że jedynie co wiem to ten pattern.

Mam nadzieję, że da się zrozumieć o jaki problem mi chodzi.

Z góry dziękuje za pomoc!


([alex]) #2

Tylko że nie ujawniłeś co rozumiesz pod "znaki specjalne".


(Angelo7) #3

Ujawniłem :slight_smile: Znaki specjalne to $ ^. Gdy są one podane w patternie w sposób który podałem traktowane są jako dopasowanie na początku, bądź końcu lini. Oczywiście można by było je podać w [], jednak chciałbym żeby mój pattern działał pomijając wszelkie znaki specjalne(metaznaki). Czyli znak $ jest interpretowany jako właśnie ten znak, a nie jako ,,modyfikator" wyrażenia.


([alex]) #4

\$ - to znak '$'

$ - to znak początku wiersza

O to ci chodzi?


(Angelo7) #5

Chodzi o to, że mój pattern jest skadś wybierany i zawiera on znak $, albo znak ^. I moim pytaniem jest, czy da się wymusić bez zmiany paternu(tj. np. $ na \$) dosłowną interpretacje znaków?

Btw. Znak dolara to chyba znak końca wiersza?


([alex]) #6

[$\$] ?


(Angelo7) #7

Dzięki @[alex] za próbe pomocy, ale kompletnie się nie rozumiemy :wink: Chodzi mi o to, że mój pattern jest tworzony, dajmy na to z jakiegoś fragmentu tekstu. Tekst ten zawiera w sobie znak $(samego bez żadnych dodatków) i z racji że ten pattern jest tworzony(albo inaczej mowiac: wycinany) dokładnie z tego tekstu bez jego modyfikowania, to i ten pattern ma znak samego $, który przez matcher jest interpretowany jako metaznak. I moje pytanie cały czas brzmiało, czy bez modyfikacji patternu(czy to przez dodanie "\" bądź klasy znaków) da się uruchomić jakąś opcje by pattern był interpretowany w sposób dosłowny ignorując wszelkie zawarte w nim metaznaki(tj. $ będzie interpretowany jak $ a nie koniec lini).

Z racji, że nieznalazłem żadnego ciekawego rozwiązanie napisałem prostą metode która przeglada pattern i zamienia metaznaki.


(Frankfurterium) #8

Znaczy się - szukasz czegoś na miarę objęcia trzeba apostrofami w Scali albo Pythonie. Traktowania tekstu jako 'raw string' bez doszukiwania się znaczenia poszczególnych znaków. Java, niestety, czegoś takiego nie oferuje. Zostaje ci samodzielna modyfikacja wzorca.