实现正则匹配HTML中a标签的href属性
2014-04-01 20:49:30   来源:   评论:0 点击:

示例如下:$str1 = test< a>;$str2 = test< a>;$str3 =
示例如下:
$str1 = '<a href=http://www.test.com>test</a>';
$str2 = '<a href=\'http://www.test.com\'>test</a>';
$str3 = '<a href = "javasccript: href (\'test\');" target = "_blank" />test</a>';
$regex = '/href\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([^"\'>\s]+))/';
preg_match($regex, $str1, $matches);
print_r($matches);
preg_match($regex, $str2, $matches);
print_r($matches);
preg_match($regex, $str3, $matches);
print_r($matches);
 
匹配结果:
Array
(
    [0] => href=http://www.test.com
    [1] => 
    [2] => 
    [3] => http://www.test.com
)
Array
(
    [0] => href='http://www.test.com'
    [1] => 
    [2] => http://www.test.com
)
Array
(
    [0] => href = "javasccript: href ('test');"
    [1] => javasccript: href ('test');
)
其中的正则表达式
/href\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([^"\'>\s]+))/
思路很巧妙,即:
分两步,先区配a标签,然后再区配a标签里面的链接。 
当然,变态的情况,比如:
$str3 = '<a href = "javasccript: href (\"test\" \'test\');" target = "_blank" />test</a>';
$regex = '/href\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([^"\'>\s]+))/';
preg_match($regex, $str3, $matches);
print_r($matches);
也是无法胜任的,不过,永远有你无法预知的变态程序员写出这样变态的代码。

相关热词搜索:

上一篇:php的setcookie()函数详解
下一篇:php网页运行超时问题:Maximum execution time of 30 seconds exceeded