我需要构建一个正则表达式(.NET 语法)来确定字符串是否以特定值结尾。具体来说,我需要测试文件是否具有特定扩展名(或一组扩展名)。
我试图修复的代码使用的是:
.*\.(png|jpg|gif)$
在我的场景中,对于失败的匹配来说,速度非常慢(可能是由于回溯)。
只需删除.*
(这很好,因为 API 只测试匹配并且不提取任何内容)在开始时使正则表达式更加高效。
感觉还是效率很低。我在这里遗漏了一些明显的东西吗?
不幸的是,我无法控制有问题的 API,因此我需要一个正则表达式来执行此操作,尽管我通常不认为正则表达式是完成这项工作的正确工具。
我还使用做了一些测试RegexOptions.RightToLeft
并发现我可以从我的测试用例中挤出更多的性能^.*\.(png|jpg|gif)$
,但我找不到指定的方法RightToLeft
正则表达式本身的字符串中的选项,所以我认为我不能使用它。
我无法访问 C#,所以我无法尝试这个...但是您应该能够通过强制引擎首先找到字符串的末尾,然后匹配扩展名来避免过多的回溯:
$(?<=\.(gif|png|jpg))
不过,我不确定后视对性能的影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)