Mam błąd def regex = "^Line[\s]+(?:(\d+)\s)?\s*:\s+(\d+)?.+";
który pasuje poniżej ciągów
Line 1 : testMessage1
Line : 2 testMessage2
Teraz próbuję zrobić regex :
jako opcjonalny, aby mógł dopasować łańcuchy takie jak
Line 3 testMessage3
Próbowałem zmienić mój regex jako ^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
java.util.regex.PatternSyntaxException: Dangling meta character "?" near index 13
^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
Czy ktoś może mi pomóc w naprawieniu regEx?
Odpowiedzi:
2 dla odpowiedzi № 1W swoim wyraże regularnym masz błąd składni:
^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
^----- Here, remove this "?"
Z drugiej strony, jeśli chcesz mieć dwukropek jako opcjonalny, musisz naprawić s
:
Lines+(?:(d+)s*)?s*:?s+(d+)?.+
^---- Here
Dodatkowo wyczyściłem trochę twoje wyrażenie regularne, które może ci się przydać:
Lines+(d)?s*:?s*(d)?.*
1 dla odpowiedzi nr 2
^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
^----- This is a mistake
The ?
jest błąd, ponieważ :
jest częścią a (?:...)
wyrażenie grupujące, a nie literalne :
postać.
Spróbujmy przerobić twoje wyrażenie regularne na podstawie twoich wymagań:
- Zacząć od
Line
- Po nim następuje co najmniej 1 spacja
- Następujący jeden z:
- Cyfry i jedna lub więcej spacji i
:
:
i jedną lub więcej spacji i cyfr- Cyfry
- Cyfry i jedna lub więcej spacji i
- Następuje spacja
- Obserwowane przez cokolwiek
Ten wzór pasuje do 3 przykładów:
"^Line\s+(\d+\s+:|:\s+\d+|\d+) .*"