正则表达式包含与其他正则表达式的转义HTML标记

时间:2011-11-14 20:18:47

标签: regex

我有这个子字符串:

<a href="http://www.somesite.com/" target="_blank">

并且在互联网上挖出了这个正则表达式来识别这个字符串的URL部分。

\ B(HTTPS | FTP |文件?):// [2 -A-Z0-9 +&安培; @#/%=〜_ |:。;] * [-A-Z0-9 + &安培; @#/%=〜_ |]

但是,此正则表达式不包含封闭的转义HTML文字 <a href=" " target="_blank">

我需要能够识别大型文档中的完整字符串,因此包括为上述字符串的未转义HTML部分组成其他正则表达式。为了找到上面的字符串,Regex会是什么样子?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用html,正则表达式可能不是一个好主意。但是,由于你有一个奇怪的字符引用用例作为标记,它可能不是真的很好。

这个Perl示例可能有用,但我不确定:

use strict;
use warnings;

my $samp = '
 <a href="http://www.somesite.com/" target="_blank">
 <a target="_blank" href="http://www.someothersite.com/" &gt;
';

my $regex = qr{
(
 (?:<|&lt;)a
    (?=\s) (?:(?!&gt;|>)[\S\s])*
    (?<=\s) href \s* = \s* 
        " \s* ((?:https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]) \s* "
    (?:(?!&gt;|>)[\S\s])* (?<!/)
 (?:>|&gt;)
)
}x;


while ($samp =~ /$regex/g) {
    print "In: '$1'\nfound: '$2'\n--------\n";
}

输出:

In: '&lt;a href="http://www.somesite.com/" target="_blank"&gt;'
found: 'http://www.somesite.com/'
--------
In: '<a target="_blank" href="http://www.someothersite.com/" &gt;'
found: 'http://www.someothersite.com/'
--------