Имам 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+) .*"