gpt4 book ai didi

regex - Groovy 扩展正则表达式语法

转载 作者:行者123 更新时间:2023-12-01 12:49:50 31 4
gpt4 key购买 nike

我正在尝试效仿 Documenting Regular Expressions in Groovy 的例子但无法让我自己的例子发挥作用。这是一个在 regex1 上失败但在压缩的 regex2 上有效的示例

def line = "some.key=a value # with comment that is ignored"
def regex1 = '''(?x) # enable extended patterns
^\\s* # ignore starting whitespace
([^=#]+) # capture key
= # literal
([^#]*) # capture value'''
def regex2 = '''^\\s*([^=#]+)=([^#]*)'''
def pattern = ~regex1
def matcher = pattern.matcher(line)
for (i=0; i < matcher.getCount(); i++) {
println matcher[i][0]
println matcher[i][1]
println matcher[i][2]
}

我得到的错误是

Caught: java.util.regex.PatternSyntaxException: Unclosed character class near index 217`

它指向最后一场比赛的最后一个右大括号。

如果我更改 regex2 并将 (?x) 添加到字符串的开头,它也会以同样的方式失败。

在这种情况下添加扩展模式的正确语法是什么?链接站点上的示例工作正常,所以我知道这应该是可能的。

最佳答案

这是因为您的正则表达式中有 # 个字符。

这意味着解析器会忽略它们出现的每一行之后的文本,因此您的分组选择器和字符选择器没有正确关闭..

尝试:

def regex1 = $/(?x)        # enable extended patterns
^\s* # ignore starting whitespace
([^=\#]+) # capture key
= # literal
([^\#]*) # capture value/$

(我将它切换为美元斜杠字符串,因为这样你就不需要转义你的转义字符(所以你得到 \s\# 而不是 \\s\\#)

关于regex - Groovy 扩展正则表达式语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13342028/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com