0

我怎样才能匹配两者(http://[^"]+)?:

<a href="http://yoursite.com/goto/http://aredirectURL.com/extraqueries"></a>

(我知道这是一个非法的 URL,但同样的想法)

我希望正则表达式给我这两个匹配项:

1 http://yoursite.com/goto/http://aredirectURL.com/extraqueries
2 http://aredirectURL.com/extraqueries

无需运行多个 preg_match_all

真的很难过,感谢您提供的任何启发。

4

3 回答 3

1

此正则表达式将为您提供所需的输出:((?:http://[^"]+)(http://[^"]+)). 注意非捕获组的用法(?:regex)。要阅读有关非捕获组的更多信息,请参阅正则表达式高级语法参考

<?php
preg_match_all(
    '((?:http://[^"]+)(http://[^"]+))',
    '<a href="http://yoursite.com/goto/http://aredirectURL.com/extraqueries"></a>',
    $out);
echo "<pre>";
print_r($out);
echo "</pre>";
?>

上面的代码输出如下:

Array
(
    [0] => Array
        (
            [0] => http://yoursite.com/goto/http://aredirectURL.com/extraqueries
        )

    [1] => Array
        (
            [0] => http://aredirectURL.com/extraqueries
        )

)
于 2012-04-19T23:23:46.857 回答
0

您可以使用此函数拆分字符串:

http://de.php.net/preg_split

每个部分可以包含例如结果中给出的数组中的一个 url。

如果有更多内容,可以在您的全文“工作”时使用回调操作调用 preg_split。

于 2012-04-19T23:05:39.040 回答
0
$str = '<a href="http://yoursite.com/goto/http://aredirectURL.com/extraqueries"></a>';

preg_match("/\"(http:\/\/.*?)(http:\/\/.*?)\"/i", $str, $match);

echo "{$match[0]}{$match[1]}\n";
echo "{$match[1]}\n";
于 2012-04-19T23:30:59.463 回答