字符串正则表达式的结尾是否在.NET中优化?

Dan*_*ite 6 .net regex

旁白:好的,我知道我不应该用正则表达式来分离这样的HTML,但它最简单的我需要的东西.

我有这个正则表达式:

Regex BodyEndTagRegex = new Regex("</body>(.*)$", RegexOptions.Compiled |
    RegexOptions.IgnoreCase | RegexOptions.Multiline);
Run Code Online (Sandbox Code Playgroud)

请注意我是如何寻找字符串结尾的$.

是否对.NET的正则表达式进行了优化,以便它不必扫描整个字符串?如果没有,我怎样才能优化它到最后开始?

sll*_*sll 9

您可以通过指定" 从右到左模式"选项来控制它本身,但正则表达式引擎不会自动对其进行自动优化,直到您通过指定选项自行完成:

我相信关键点是:

默认情况下,正则表达式引擎从左向右搜索.

您可以使用RegexOptions.RightToLeft选项反转搜索方向.搜索自动从字符串的最后一个字符位置开始.对于包含起始位置参数的模式匹配方法,例如Regex.Match(String,Int32),起始位置是搜索开始时最右侧字符位置的索引.

重要:

RegexOptions.RightToLeft选项仅更改搜索方向; 它不会从右到左解释正则表达式模式

  • 我只是在一个长字符串上使用OP的regex表达式进行了快速测试,使用10,000次迭代.没有RegexOptions.RightToLeft的1,950毫秒,只有64毫秒. (3认同)