为什么这个正则表达式没有捕获任何内容
本文关键字:任何内 正则表达式 为什么 | 更新日期: 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>
如果我没有弄错。匹配换行符以外的任何字符。