为什么这个正则表达式没有捕获任何东西?

时间:2011-06-20 05:54:23

标签: c# regex

我知道,我应该使用htmlAgilityPack - 但就我而言,我没有任何机会......悲伤但真实...... 我们有以下正则表达式:<a(.+?)(href=["|'](.+?)["|'])(.+?)>(.+?)</a> 以及样本输入:

<A href="
http://dummy.domain/dummy.html
" target="_blank"><b><font face="Arial" color="#0000FF" size="2">
Dummy text
</font></b></a>

如果我删除组内的换行符,一切正常。我在.net c#上使用ignore-case - 选项运行。

.没有捕获任何\r\n - 事物吗?

3 个答案:

答案 0 :(得分:1)

我猜你把管道符号放在字符类中表示“OR” - 如果是这种情况,删除管道,[]暗示其任何成员的“OR”。

此外,请记住HTML中可能存在\n的任何内容,并且“。”不会捕获这些字符(它会捕获\r)。

要匹配换行符,您需要使用SingleLine选项,或将.更改为替代[.\n][\s\S]等替代. }}。以下是内联指定的单线模式的示例:

(?s)<a(.+?)(href=["'](.+?)["'])([^>]*)>(.+?)</a>

另请注意此处使用的[^>]*,它比使用非贪婪的匹配更简单。

答案 1 :(得分:1)

如果您只是想在标签之间选择所有内容,请尝试使用

<a\b[^>]*>([\s\S.]*?)</a>

答案 2 :(得分:0)

如果我没弄错的话。匹配除换行符之外的任何字符。