使用正则表达式有效测试“EndsWith”

2023-12-26

我需要构建一个正则表达式(.NET 语法)来确定字符串是否以特定值结尾。具体来说,我需要测试文件是否具有特定扩展名(或一组扩展名)。

我试图修复的代码使用的是:

.*\.(png|jpg|gif)$

在我的场景中,对于失败的匹配来说,速度非常慢(可能是由于回溯)。

只需删除.*(这很好,因为 API 只测试匹配并且不提取任何内容)在开始时使正则表达式更加高效。

感觉还是效率很低。我在这里遗漏了一些明显的东西吗?

不幸的是,我无法控制有问题的 API,因此我需要一个正则表达式来执行此操作,尽管我通常不认为正则表达式是完成这项工作的正确工具。

我还使用做了一些测试RegexOptions.RightToLeft并发现我可以从我的测试用例中挤出更多的性能^.*\.(png|jpg|gif)$,但我找不到指定的方法RightToLeft正则表达式本身的字符串中的选项,所以我认为我不能使用它。


我无法访问 C#,所以我无法尝试这个...但是您应该能够通过强制引擎首先找到字符串的末尾,然后匹配扩展名来避免过多的回溯:

$(?<=\.(gif|png|jpg))

不过,我不确定后视对性能的影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用正则表达式有效测试“EndsWith” 的相关文章

随机推荐