C#|正则表达式Dotall和结果匹配

时间:2011-06-09 09:06:17

标签: c# regex

到目前为止,我如何在C#Regex上启用dotall标志? 我有这个正则表达式。

string reg = "<table>.*</table>";

例如,我正在使用这个html文本

<table id="table1">
<table id="table2">
</table>
</table>

我的正则表达式在哪里停止比赛?第一个</table>或第二个</table>

谢谢大家...... :)

3 个答案:

答案 0 :(得分:3)

默认情况下,正则表达式是贪婪的,尽可能地吞噬。因此,它将停在第二个表格。

您可以通过应用问号修饰符来更改此项。

<table>.*?</table>

也就是说,您需要确保将正则表达式设置为涵盖多行的文本。

答案 1 :(得分:2)

*是一个'贪婪'的运算符 - 即它尽可能多地吃掉,因此它会在第一个<table>和第二个</table>之间匹配(提供正则表达式是配置为匹配多行)。您可以使用*?来使其“非贪婪”。

答案 2 :(得分:0)

Dotall是一个正则表达式,所以你可以使用: Regex.Replace(input,regex,replace,RegexOptions.Singleline | RegexOptions.IgnoreCase)

Dotall = RegexOptions.Singleline,因为它将字符串视为一行。

你也可以在正则表达式指令的中间修改正则表达式标志,如: (?s) - 将模式的其余部分与以下有效标记匹配:migs(多行,忽略,全局和单行)