我有一个regEx def regex = "^Line[\\s]+(?:(\\d+)\\s)?\\s*:\\s+(\\d+)?.+";
,匹配以下字符串
Line 1 : testMessage1
Line : 2 testMessage2
现在我正在尝试使用正则表达式使:
成为可选项,以便它可以匹配像
Line 3 testMessage3
我已尝试将我的注册表更改为^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吗?
答案 0 :(得分:2)
您的正则表达式中存在语法错误:
^Line[\s]+(?:?(\d+)\s)?\s*:?\s+(\d+)?.+
^----- Here, remove this '?'
另一方面,如果您想将冒号作为可选项,则必须修复\s
:
Line\s+(?:(\d+)\s*)?\s*:?\s+(\d+)?.+
^---- Here
<强> Working demo 强>
另外,我清理了一些您可能觉得有用的正则表达式:
Line\s+(\d)?\s*:?\s*(\d)?.*
答案 1 :(得分:1)
^Line[\s]+(?:?(\d+)\s)?\s*:?\s+(\d+)?.+
^----- This is a mistake
?
存在错误,因为:
是(?:...)
分组表达式的一部分,而不是文字:
字符。
让我们根据您的要求尝试修改您的正则表达式:
Line
:
:
以及一个或多个空格和数字此模式与您的3个示例匹配:
"^Line\\s+(\\d+\\s+:|:\\s+\\d+|\\d+) .*"