到目前为止,我如何在C#Regex上启用dotall标志? 我有这个正则表达式。
string reg = "<table>.*</table>";
例如,我正在使用这个html文本
<table id="table1">
<table id="table2">
</table>
</table>
我的正则表达式在哪里停止比赛?第一个</table>
或第二个</table>
谢谢大家...... :)
答案 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(多行,忽略,全局和单行)