多行正则表达式不匹配

时间:2014-05-30 11:09:30

标签: .net regex

我有一个正则表达式来获取HTML注释之间的所有数据。下面是我的正则表达式和我的HTML部分。

Dim rgx As New Regex("<!-- START data-contentid='([0-9]+)' -->((\s|.)*?)<!-- END data-contentid='([0-9]+)' -->", RegexOptions.Multiline Or RegexOptions.IgnoreCase)

此正则表达式正在运行,它将返回所需组的2个结果。奇怪的是这个:

如果我更改此内容:((\s|.)*?)到此(.*?)我的正则表达式停止工作,而.代表任何字符。

为什么OR正则表达式正在工作的任何线索,但为什么这个DOT正则表达式不是?

<!-- START data-contentid='1151' -->
<div class="dyn-content content" data-contentid="1151">
The content

</div>
<!-- END data-contentid='1151' --><br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
    AABB
<!-- START data-contentid='866' -->
<div class="dyn-content content" data-contentid="866">
    <h1></h1>
    ASBCSDFGGGGGGGGGGGGGGGGGGGGGGGGGG</div>
<!-- END data-contentid='866' -->

1 个答案:

答案 0 :(得分:2)

RegexOptions.Multiline每行生成正则表达式匹配行。

您的意思是RegexOptions.SingleLine

来自MSDN

  

多线模式。更改^和$的含义,使它们分别匹配任何行的开头和结尾的,而不仅仅是整个字符串的开头和结尾。