RE2 无法匹配简单模式

RE2 failed to match easy pattern

提问人:RUSLAN SIMAKOV 提问时间:11/14/2023 最后编辑:Tim BiegeleisenRUSLAN SIMAKOV 更新时间:11/14/2023 访问量:51

问:

将简单的正则表达式与 Re2j 库一起使用 Spring (Java) 项目。在调试模式下,我发现了该模式:

^[0-9a-fA-F:]+$

它编译了,但无法识别文本:

123ABC:DEF456
0:1:2:3:4:5
12345
90210-1234

期望模式匹配文本,但 hasMatch = false

正则表达式 RE2

评论

0赞 Reilas 11/14/2023
可能是错别字?尝试,^[-0-9a-fA-F:]+$
0赞 Wiktor Stribiżew 11/14/2023
错过了旗帜?MULTILINE(?m)^[0-9a-fA-F:]+$
0赞 RUSLAN SIMAKOV 11/14/2023
Wiktor Stribiżew 非常感谢!Pattern.compile(regEx, Pattern.MULTILINE) 已解决的问题
0赞 Reilas 11/14/2023
它仍然与文本不匹配......哈哈。

答:

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

感谢 @Wiktor Stribiżew 的评论

错过了旗帜?MULTILINE(?m)^[0-9a-fA-F:]+$

这解决了问题:

Pattern.compile(regEx, Pattern.MULTILINE)