我正在为程序使用某些正则表达式,我希望该程序检测到某个名为gruell [something] .exe的exe
所以我最终得到了以下正则表达式:
+--+------+---+-------------------+
|id|cardId|elo|timestamp |
+--+------+---+-------------------+
|4 |000ac9|130|2018-12-19 17:59:16|
|5 |000ad9|260|2018-12-19 19:01:16|
+--+------+---+-------------------+
在这两个站点上进行测试后,我的测试用例都可以正确检测到
我的测试集:(以及应该失败并通过的结果)
当我使用java.util.regex.Pattern在计算机上运行此文件时,即使我告诉它扫描的文件夹同时包含这两个文件,它也找不到任何东西:
现在最有趣的部分是当我删除[^。]时,它会检测到,但是它也检测到.gruell.exe.398sn,这是我不想要的。
有问题的代码:
gruell.*\.exe[^\.]
功能:
File f = new File("G:\\dev\\gruell");
recursive_scan(f);
答案 0 :(得分:2)
在[regex101和RegExr]上都进行测试后,我的测试用例被正确检测到
这似乎不太可能,因为您的模式确实有问题,不仅在Java的Regex方言中,而且在那些站点测试过的方言中也是如此。我看到的唯一合理的解释是,您实际上并未在测试您认为是的情况。例如,您的测试输入可能有尾随空格或换行符。
这使我想到了您的模式问题。如您所见,
现在最有趣的部分是当我删除[^。]时,它将检测到
这是因为该子表达式匹配一个字符(与.
不同)。因此,您的总体模式确实与"gruell-Core.exe"
不匹配,因为.exe
之后没有字符。尝试匹配"gruell-Core.exee"
。
如果您希望比赛以.exe
结尾,那么请锚定您的模式:gruell.*\.exe$
答案 1 :(得分:0)
好的,感谢约翰·波林格(John Bollinger)提供的网站https://www.regexplanet.com/advanced/java/index.html,在这里我发现了两处错误的地方。
首先我必须使用:
pattern.matcher(file.name).matches()
而不是我拥有的东西:
pattern.matcher(file.name).find()
第二步,我不得不从字符串末尾删除[^。]。
发件人:
"gruell.*\\.exe[^.]"
收件人:
"gruell.*\\.exe"