Regular expression to find URLs not inside a hyperlink
有很多regex可以匹配一个URL。但是,我尝试匹配不在
1 2 3 | something http://www.example2.com somethinghttp://www.example.com/<span>test</span> |
应匹配
我尝试的一种方法是使用一个否定的lookahead来查看URL后面的第一个
你可以分两步来完成,而不是试图想出一个单一的正则表达式:
混合HTML锚定部分(整个锚定标记:开始标记、内容和结束标记)。
匹配URL
在Perl中,它可以是:
1 2 3 4 5 6 7 | my $curLine = $_; #Do not change $_ if it is needed for something else. $curLine =~ ///g; #Remove all of HTML anchor tag,"" and everything in between. if ( $curLine =~ /http:\/\//) { print"Matched an URL outside a HTML anchor !: $_ "; } |
使用dom过滤掉锚元素,然后在其余部分执行一个简单的url regex。
彼得有一个很好的答案:首先,去掉锚,这样
1 | Some text TeXt and some more text with link http://a.net |
替换为
1 | Some text and some more text with link http://a.net |
。
然后运行查找URL的regexp:
1 | http://a.net |
您可以使用一个同时匹配定位标记和超链接的正则表达式来完成此操作:
1 2 | # Note that this is a dummy, you'll need a more sophisticated URL regex regex = '(]+>)|(http://.*)' |
号
然后循环结果,只在找到第二个子模式的地方进行进程匹配。