我试图构建正则表达式来从文本中提取链接没有rel =“nofollow”。正则表达式提取具有指定属性的链接
例子:
aiusdiua asudauih <a rel="nofollow" hre="http://uashiuadha.asudh/adas>adsaag</a> uhwaida <br> asdgydug <a href="http://asdha.sda/uduih/dufhuis>aguuia</a>
谢谢!
我试图构建正则表达式来从文本中提取链接没有rel =“nofollow”。正则表达式提取具有指定属性的链接
例子:
aiusdiua asudauih <a rel="nofollow" hre="http://uashiuadha.asudh/adas>adsaag</a> uhwaida <br> asdgydug <a href="http://asdha.sda/uduih/dufhuis>aguuia</a>
谢谢!
下面的正则表达式将做的工作:
<a (?![^>]*?rel="nofollow")[^>]*?href="(.*?)"
想要的网址将位于捕获组#1中。例如。在Ruby中这将是:
if input =~ /<a (?![^>]*?rel="nofollow")[^>]*?href="(.*?)"/
match = $~[1]
end
由于在负先行,href
或其他任何东西可以rel
来之前rel
之前接受[^>]*?
。如果href
在rel
之后,它当然也可以。
我使用正则表达式的经验在使用时请务必小心。*? – CodeWrite 2011-04-01 08:35:48
@regexhacks:为什么要小心使用'。*?' – 2011-04-01 08:58:43
@regexhacks我同意。一个人必须小心,不接受任何或无限的所有量词。 – 2011-04-01 09:07:13
试试这个 <(?:A|AREA)\b[^<>]*?(?!rel="nofollow")[^<>]*?href=['"]([^>"]*)[^>]*?>
,如果你使用的是.NET的正则表达式,然后
<(?:A|AREA)\b[^<>]*?(?!rel="nofollow")[^<>]*?href=['"](?<URL>[^>"]*)[^>]*?>
数据位于名为URL组或组1
我认为你将不得不修复关于这个答案的两个问题: 1)现在它会发现实际上有'rel =“nofollow”'的字符串,但问题是相反的问题。 2)如果'href'在'a'标签的'rel'之前出现,则不匹配。 – 2011-04-01 08:39:15
是的!这应该。你比我的好! :-)我不会编辑。支持答案。 – CodeWrite 2011-04-01 09:10:37
...有没有可能使用解析器而不是正则表达式? – jensgram 2011-04-01 08:15:57
不,我想使它与正则表达式 – 2011-04-01 08:18:50