/ / java.util.regex.PatternSyntaxException: Dangling мета символ '?' - java, regex, groovy

java.util.regex.PatternSyntaxException: Повтарящ мета символ "?" - java, regex, groovy

Имам regEx def regex = "^Line[\s]+(?:(\d+)\s)?\s*:\s+(\d+)?.+"; което съвпада под низовете

Line 1 : testMessage1
Line : 2 testMessage2

Сега се опитвам да направя регекс да правя : като опция, така че да може да съвпада с низове като

Line 3 testMessage3

Опитах се да променя моя regEx като ^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+

java.util.regex.PatternSyntaxException: Dangling meta character "?" near index 13
^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+

може ли някой да ми помогне да коригирам regEx?

Отговори:

2 за отговор № 1

Имате синтактична грешка във вашия регекс:

^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
^----- Here, remove this "?"

От друга страна, ако искате да имате дебелото черво като незадължително, трябва да поправите s:

Lines+(?:(d+)s*)?s*:?s+(d+)?.+
^---- Here

Работна демонстрация

Освен това почистих малко вашето реджекс, което може да ви се стори полезно:

Lines+(d)?s*:?s*(d)?.*

1 за отговор № 2
^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
^----- This is a mistake

Най- ? има грешка, защото : е част от a (?:...) групово изражение, а не буквално : характер.

Нека се опитаме да преработим регекса си въз основа на вашите изисквания:

  • Започни с Line
  • Следва най-малко 1 интервал
  • Следван от който и да е от:
    • Цифри и едно или повече място и :
    • : и едно или повече място и цифри
    • цифри
  • Следван от космоса
  • Следван от каквото и да било

Този модел съвпада с вашите 3 примера:

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