PHP 正则匹配A标签获得连接和文字

<FONT SIZE=2><a href=/ztg/51678.nsf/0/8DEAD765CF54DA1948257FD4003A9618/$file/公示.xls><img src=http://10.1.5.25:180/icons/vwicn005.gif border=0>文件1</a>

数据如上,匹配数据中所有的A标签得到全部的文字和连接,如“文件1”,“/ztg/51678.nsf/0/8DEAD765CF54DA1948257FD4003A9618/$file/公示.xls”

<a\b[^>]*\bhref=([^\s>]+)[^>]*>[\s\S]*?([^<>]*)</a>

解释:
<a\b #匹配a标签的开始
[^>]* #匹配a标签href属性前的其他属性
\bhref=([^\s>]+) #匹配href属性,并将匹配到的内容捕获到分组1当中
[^>]*> #匹配a标签的结束
[\s\S]*? #匹配a标签文本前的img标签
([^<>]*) #匹配a标签文本并捕获到分组2当中
</a> #匹配a标签的关闭

分组1和分组2即为所需内容

简化版:
<a\s*href=([^>]+)><img[^>]+>([^>]+)</a>
实际上简化版可能效率更高……因为严格按照原文本格式来匹配。
不过如果标签形式有一点变化就可能导致匹配失败,所以这里写了两个版本。。追问

preg_match_all(']+)>]+>([^>]+)',$str,$array);
是这样吗,返回为空

追答

php正则两边要加/
preg_match_all('/]+)>]+>([^>]+)/',$str,$array);

追问

Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'a'
有一个警告,依旧为空

追答

好吧,是斜杠忘记转义了。

preg_match_all('/]+)>]+>([^>]+)/',$str,$array);

嗯,这样就没有问题了。

温馨提示:答案为网友推荐,仅供参考
相似回答