为什么这个正则表达式没有捕获任何内容

本文关键字:任何内 正则表达式 为什么 | 更新日期: 2023-09-27 17:59:42

我知道,我应该使用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>

如果我删除组中的换行符,一切都会正常工作。我正在用ignore-case-选项在.net c#上运行这个。

.没有捕获任何'r'n的东西吗?

为什么这个正则表达式没有捕获任何内容

我猜您在字符类中放置了表示"OR"的管道符号——如果是这样,请删除管道,[]意味着其任何成员的"OR"。

此外,请记住,在HTML中的任何位置都有'n的可能性,并且"."不会捕获这些字符(它会捕获'r)。

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

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

还要注意这里使用的[^>]*,它比使用非贪婪匹配简单一点。

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

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

如果我没有弄错。匹配换行符以外的任何字符。