/ / java.util.regex.PatternSyntaxException: Zwisająca meta "?" - Java, regex, groovy

java.util.regex.PatternSyntaxException: Zwisająca meta "?" - Java, regex, groovy

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 № 1

W 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

Demo robocze

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
  • Następuje spacja
  • Obserwowane przez cokolwiek

Ten wzór pasuje do 3 przykładów:

"^Line\s+(\d+\s+:|:\s+\d+|\d+) .*"