Byłoby wspaniale mieć wygodny sposób przechowywania wzorców z pojedynczym ukośnikiem odwrotnym. Niektóre obejścia: zapisz je w pliku i użyj NIO do czytania. Wady: Java EE nie pozwala na dostęp do IO. Przechowuj jakoś w JNDI. Może nowa flaga java 5 Pattern.LITERAL
może pomóc? Chcę pracować z normalnym ciągiem znaków, takim jak \d
, a nie \\d
.Wzory Java Regexp mają podwójne ukośniki odwrotne, jak przechowywać wzorce w czytelnym formacie.
Odpowiedz
Problem polega na tym, że \
jest specjalnym znakiem w języku Java podczas tworzenia łańcucha znaków, niezależnie od wyrażeń regularnych.
np String s = "\t";
nie można użyć tego dla dowolnych znaków choć String s = "\a";
daje błąd kompilacji. Poprawne znaki są b, t, n, f, r,”, 'i \
zatem uzyskać dosłowne \
w ciągu w Javie trzeba uciec tak:. \\
dlatego, twój tylko opcja NIE ma tych ciągów w plikach Java, dlatego w zewnętrznym pliku ładowanym przez plik Java. Pattern.LITERAL
nie pomoże w ogóle, ponieważ wciąż potrzebujesz poprawnego łańcucha java, którego nie ma \d
.
Jeśli pracujesz tylko w Javie, radzę nie spocić się. Po prostu przechowuj wyrażenie regularne, ponieważ Java może je zrozumieć, czyli z denerwującym podwójnym \
.
JEŻELI i TYLKO JEŚLI chcesz zapisać wyrażenie regularne, aby użyć ich jako pliku wejściowego dla różnych języków, a następnie utwórz plik tekstowy, używając standardowej notacji regularnej. Ale wtedy będziesz musiał stworzyć jakąś klasę, która będzie używała char przez czytanie znaku i sama zajmie się znakami przed dodaniem ich do ciągu, który ma być użyty w macierzy wzoru.
to dużo pracy (właściwie nie za dużo, ale niech to diabli, jeśli to nie będzie dziwaczne), ale musisz zrobić to tylko raz, a możesz rozszerzyć to na wiele języków, byłoby dobrze doświadczenie w nauce w mojej opinii. Zrób to źle, a będziesz cierpieć z powodu debugowania małego drania.
Może być miłym, jeśli nie życiowym dodatkiem do Javy, jakaś flaga, która pozwala, aby tekst z pliku był odczytywany bezpośrednio jako standardowy łańcuch regex, który sam wprowadzałby niezbędne zmiany. Muszę sprawdzić, czy ktoś zasugerował tę funkcję.
PS: Właśnie zauważyłem, że tutaj trzeba uciec \
aby był on widoczny ... to dziwne ...
Nie trzeba pisać kodu, aby uniknąć ukośników odwrotnych, jeśli czytasz go z pliku. Dodatkowe ukośniki odwrotne służą do przechodzenia w składni * java *. –
@Dilum ma rację: wszystkie podwójne ucieczki są potrzebne tylko wtedy, gdy regex zostanie utworzony * w kodzie źródłowym Java *, jako literały String. Jeśli czytasz to z innego miejsca, np. Pliku lub pola JTextField, nie jest konieczne dodatkowe przechodzenie. Powodem, dla którego nie widzisz tego problemu w większości innych języków jest to, że oferują one zarówno regex literały, jak i surowe/dosłowne/nieinterpolujące ciągi literowe (lub oba). –
Przy okazji, możesz użyć cofnięć lub wcięcia, aby sformatować kod w swoich postach, więc nie musisz (na przykład) ukrywać ukośników.Możesz edytować swoją odpowiedź, aby zobaczyć, jak to zrobiłem. Naciśnij pomarańczowy przycisk "Pomoc" nad polem tekstowym, aby uzyskać więcej opcji. –
Jeśli jesteś zainteresowany przeczytaniem wyrażenia z pliku, należy rozważyć pakowania plik wewnątrz jar i użycie Class.getResourceAsStream(...)
. AFAIK, który jest nadal dozwolony w Java EE.
- 1. Jak zamienić ukośniki do przodu w ukośniki odwrotne w ciągu w Emacs Lisp?
- 2. PHP i odwrotne ukośniki w ciągach znaków
- 3. Metoda appendReplacement Matchera ignoruje ukośniki odwrotne zastępcze
- 4. Serialize w czytelnym dla człowieka formacie tekstowym
- 5. Jak uzyskać zależności Maven wydrukowane w pliku w czytelnym formacie?
- 6. Ignoruj znaki escape (odwrotne ukośniki) w ciągach R
- 7. Jak interpretować echo odwrotne ukośniki odwrotne, a nie drukować końcowy znak nowej linii?
- 8. Czy mają wzory patologiczne Lua z wykładniczym czasem działania?
- 9. Cassandra cli: Konwersja wartości szesnastkowe w formacie czytelnym dla człowieka
- 10. Wydrukuj czas w formacie czytelnym dla człowieka przez EL
- 11. Wyrażenie ruby: zastąp podwójne ukośniki w adresie URL
- 12. Wymień tyłu tnie z przodu ukośniki lub podwójne tyłu ukośniki w C++
- 13. Jak pokolorować wzory wyników vimgrep
- 14. Wzory UI w kodzie JavaScript
- 15. Haskell - Czy literalne ukośniki odwrotne zawsze muszą być ujęte w ciąg znaków?
- 16. Jak wykonać dane sumaryczne, krzyżowe, różnicowe i odwrotne w java
- 17. wzory trwałości zeromq
- 18. jak przechowywać dane w określonym formacie? w WYSWYG?
- 19. Wzorce graficzne GUI?
- 20. Wzory projektowe Java EE DAO/DTO (obiekt przenoszenia danych)
- 21. Jak przechowywać przedmioty ze złomu w formacie json?
- 22. Jak przechowywać enum Java w JavaDB?
- 23. wzory Java, aby utrzymać spójne indeksów na danych w kolekcji
- 24. Uczyń xml bardziej czytelnym
- 25. rubin regexp zastąpić równań
- 26. wyjście Curl do wyświetlenia w czytelnym formacie JSON w skrypcie powłoki UNIX
- 27. Przepisywanie ukośniki w parametrze zapytania
- 28. Jak zrobić "grep" odczytać wzorce z pliku?
- 29. Podwójne biblioteki rozliczeniowe dla Java?
- 30. Drukowanie godziny otwarcia restauracji z tabeli bazy danych w czytelnym formacie człowieka za pomocą php
ustalono: jest to ból –
Należy zauważyć, że nie ma to nic wspólnego z regex w szczególności; znak ukośnika odwrotnego we WSZYSTKICH literałach łańcuchowych w Javie zapisuje się jako \\. – polygenelubricants