我有这个子字符串:
<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会是什么样子?
谢谢!
答案 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/" >
';
my $regex = qr{
(
(?:<|<)a
(?=\s) (?:(?!>|>)[\S\s])*
(?<=\s) href \s* = \s*
" \s* ((?:https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]) \s* "
(?:(?!>|>)[\S\s])* (?<!/)
(?:>|>)
)
}x;
while ($samp =~ /$regex/g) {
print "In: '$1'\nfound: '$2'\n--------\n";
}
输出:
In: '<a href="http://www.somesite.com/" target="_blank">'
found: 'http://www.somesite.com/'
--------
In: '<a target="_blank" href="http://www.someothersite.com/" >'
found: 'http://www.someothersite.com/'
--------