preg_match_all没有正确匹配href部分

时间:2013-02-21 22:22:58

标签: php preg-match-all

我在使用preg_match_all匹配链接的href部分时遇到问题,目前它正在捕获3个部分(仅限完整链接,仅限网址,仅限链接文本),这是完美的,但仅限网址部分正在捕获位于任何其他标记的部分在href标签之后。

另外,如何使“href”文本不区分大小写?

代码:

$content = '<a href="http://www.google.com" target="_blank">Google</a> is a search engine. <a href="http://www.yahoo.com" title="yahoo" target="_blank">Yahoo</a> is a search engine.';

preg_match_all('/<a href="([^<]*)">([^<]*)<\/a>/', $content, $matches);

print_r($matches);

结果:

Array
(
    [0] => Array
        (
            [0] => <a href="http://www.google.com" target="_blank">Google</a>
            [1] => <a href="http://www.yahoo.com" title="yahoo" target="_blank">Yahoo</a>
        )

    [1] => Array
        (
            [0] => http://www.google.com" target="_blank
            [1] => http://www.yahoo.com" title="yahoo" target="_blank
        )

    [2] => Array
        (
            [0] => Google
            [1] => Yahoo
        )

)

1 个答案:

答案 0 :(得分:2)

你开始寻找&gt;而不考虑任何其他属性。尝试

/<a href="([^"]*)"[^>]+>([^<]*)<\/a>/

现在将拉出href,然后跳过剩下的属性,然后将html拉到下一个标签