提问人:RUSLAN SIMAKOV 提问时间:11/14/2023 最后编辑:Tim BiegeleisenRUSLAN SIMAKOV 更新时间:11/14/2023 访问量:51
RE2 无法匹配简单模式
RE2 failed to match easy pattern
问:
将简单的正则表达式与 Re2j 库一起使用 Spring (Java) 项目。在调试模式下,我发现了该模式:
^[0-9a-fA-F:]+$
它编译了,但无法识别文本:
123ABC:DEF456
0:1:2:3:4:5
12345
90210-1234
期望模式匹配文本,但 hasMatch = false
答:
0赞
Tim Biegeleisen
11/14/2023
#1
我看到您当前的模式存在多个问题。首先,分隔符似乎可以是 或 ,但您的模式只迎合前者。此外,如果您想在多行中匹配许多此类字符串,则需要考虑到这一点。:
-
试试这个版本:
^[0-9a-fA-F]+(?:[:-][0-9a-fA-F]+)*(?:\r?\n[0-9a-fA-F]+(?:[:-][0-9a-fA-F]+)*)*$
演示
如果一次只需要匹配一行,则简化为:
^[0-9a-fA-F]+(?:[:-][0-9a-fA-F]+)*$
评论
0赞
RUSLAN SIMAKOV
11/14/2023
谢谢你的回答。实际上,我正在测试我的模式,如果我在 regexp101 中检查它 - 它匹配 3 次。我预料到了这一点。我不需要更改图案或文本。我需要明白,为什么 RE2 不匹配
0赞
Tim Biegeleisen
11/14/2023
90210-1234
将与您的正则表达式模式不匹配,使用任何引擎 AFAIK。也许那时只有我答案的第一部分是相关的。
0赞
RUSLAN SIMAKOV
11/14/2023
你可以看到,4 场比赛中的 3 场比赛 regex101.com/r/WoMDkS/1
0赞
Tim Biegeleisen
11/14/2023
@RUSLANSIMAKOV我看不出你在这里有什么疑问。您的图案与破折号不匹配,那么如何匹配第 4 个输入?
0赞
RUSLAN SIMAKOV
11/14/2023
#2
错过了旗帜?
MULTILINE
(?m)^[0-9a-fA-F:]+$
这解决了问题:
Pattern.compile(regEx, Pattern.MULTILINE)
评论
MULTILINE
(?m)^[0-9a-fA-F:]+$