Oto problem: użytkownik ma pole tekstowe, do którego może wpisać filtr . Filtr do filtrowania niefiltrowanych danych. Użytkownik, doświadczając prania mózgu Oracle Forms, nie ma żadnych znaków specjalnych innych niż%, co, jak sądzę, oznacza mniej więcej wyrażenie ". *" W Javie.Jak uciec od wszystkich znaków specjalnych regex, ale nie wszystkie naraz (przez Pattern.quote()), tylko jeden po drugim
Jeżeli osoba Użytkownik jest dobrze wychowane, dana osoba będzie wpisać rzeczy jak „CTHULH%”, w którym to przypadku można skonstruować schemat:
Pattern.compile(inputText.replaceAll("%", ".*"));
Ale jeśli osoba Użytkownik pochodzi z Innsmouth, insurmountably będzie on wpisać "+ \ [a - # $%^& * (." niszcząc mój program za pomocą kilku prostych naciśnięć klawiszy to nie zadziała:
Pattern.compile(Pattern.quote(inputText).replaceAll("%", ".*"));
jak to umieścić \ Q na początku i \ E. na końcu ciągu, sprawdzanie mojej opcji% ->. * switch.
Pytanie brzmi: czy muszę wyszukać wszystkie znaki specjalne w kodzie Pattern i uciec samemu, dodając "\\" z przodu, czy może to zrobić automagicznie? Czy jestem tak głęboko w problemie, pomijam jakiś oczywisty sposób rozwiązania?
+1 Ale nie jestem pewien, czy dokumentacja dla metody 'quote' gwarantuje *, że ciąg będzie zawsze otoczony przez '\ Q' i' \ E' (mówi tylko "Ta metoda tworzy ciąg, który może używaj do stworzenia Wzorca, który będzie pasował do łańcucha s, jak gdyby był dosłownym wzorem. "). Chociaż w praktyce uważam, że wszystkie obecnie istniejące impedycje Javy wykorzystują do tego celu '\ Q ... \ E'. –
@Thomas przepraszam pytanie początkujących - jaki jest tutaj zwyczaj? Czy mogę skasować moje komentarze po aktualizacji odpowiedzi? –
@pafauk. Hmm, nie jestem pewien, ale jeśli komentarze nie dostarczają żadnych dodatkowych informacji (co moim zdaniem dotyczy naszych komentarzy teraz), usunę je, aby zachować przejrzystość. Zacznę i usuniemy moje poprzednie komentarze. – Thomas