java.util.regex.PatternSyntaxException : Dangling meta character '?'

标签 java regex groovy

我有一个正则表达式 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+)?.+

有人可以帮我修复正则表达式吗?

最佳答案

您的正则表达式中有语法错误:

^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)?.*

关于java.util.regex.PatternSyntaxException : Dangling meta character '?' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45062816/

相关文章:

JavaScript:拆分逗号分隔的字符串但忽略花括号

java - Spring 启动: Update Operation in New Thread

java - @Rule 声明会导致调试尝试出错

java - Maven 发布插件 : Releasing with a SNAPSHOT version

java - 尝试运行简单的 Kafka Stream 应用程序时收到异常

regex - Shell:如何用保存的变量值替换文本的某些内容

Python正则表达式: pattern with re. ASCII仍然可以匹配unicode字符?

java - 如何转换 Groovy -> Kotlin DSL (Gradle) 的 "sourceSet"?

java - 如何在单个图像中聚集颜色?

java - 如何访问作为线程的一部分发生的异常信息?