Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是字符串结尾的正则表达式';它在.NET中优化了吗?_.net_Regex - Fatal编程技术网

是字符串结尾的正则表达式';它在.NET中优化了吗?

是字符串结尾的正则表达式';它在.NET中优化了吗?,.net,regex,.net,Regex,旁白:好吧,我知道我不应该用正则表达式来区分这样的HTML,但这是我需要的最简单的方法 我有一个正则表达式: Regex BodyEndTagRegex = new Regex("</body>(.*)$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline); Regex BodyEndTagRegex=new Regex((.*)$”,RegexOptions.Compile

旁白:好吧,我知道我不应该用正则表达式来区分这样的HTML,但这是我需要的最简单的方法

我有一个正则表达式:

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。但是,除非你有充分的理由,否则我会坚持使用正则表达式以提高可读性和可维护性:)