是字符串结尾的正则表达式';它在.NET中优化了吗?
旁白:好吧,我知道我不应该用正则表达式来区分这样的HTML,但这是我需要的最简单的方法 我有一个正则表达式:是字符串结尾的正则表达式';它在.NET中优化了吗?,.net,regex,.net,Regex,旁白:好吧,我知道我不应该用正则表达式来区分这样的HTML,但这是我需要的最简单的方法 我有一个正则表达式: Regex BodyEndTagRegex = new Regex("</body>(.*)$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline); Regex BodyEndTagRegex=new Regex((.*)$”,RegexOptions.Compile
Regex BodyEndTagRegex = new Regex("</body>(.*)$", RegexOptions.Compiled |
RegexOptions.IgnoreCase | RegexOptions.Multiline);
Regex BodyEndTagRegex=new Regex((.*)$”,RegexOptions.Compiled|
RegexOptions.IgnoreCase | RegexOptions.Multiline);
注意我是如何用$
查找字符串的结尾的
NET的正则表达式是否进行了优化,以便它不必扫描整个字符串?如果没有,我如何优化它以从末尾开始?您可以通过指定选项来控制它本身,但在您自己指定选项之前,regex引擎不会自动优化它本身: 我相信关键是: 默认情况下,正则表达式引擎从左到右搜索。 您可以使用 RegexOptions.RightToLeft选项。搜索将自动从开始 字符串的最后一个字符位置。用于模式匹配 包含起始位置参数的方法,例如 Match(String,Int32),起始位置是 开始搜索的最右边的字符位置 重要提示: RegexOptions.RightToLeft选项仅更改搜索方向; 它不从右到右解释正则表达式模式 左
似乎是个奇怪的问题-有什么理由怀疑他们不会吗?嗯,我将在一个很长的字符串上执行此操作,我只想知道是否有更好的方法来优化它。因此,实际上,这只是为了比调用
LastIndexOf
和Substring
更简洁。LastIndexOf
具有不敏感特性的LastIndexOf
会更有效吗从结尾向后看(只是检查了反编译),我不知道有任何聪明的技术,比如Boyer Moore,用于的最后一个索引。我只是在一个长字符串上使用OP的正则表达式进行了一个快速测试,使用了10000次迭代。1950ms没有RegexOptions.right到left,只有64ms…使用LastIndexOf
和Substring
组合使用速度更快-只有15ms。但是,除非你有充分的理由,否则我会坚持使用正则表达式以提高可读性和可维护性:)