繁体   English   中英

有没有办法与正则表达式递归/嵌套匹配? (PHP,preg_match_all)

[英]Is there a way to match recursively/nested with regex? (PHP, preg_match_all)

如何匹配两个(http://[^"]+)

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

(我知道这是一个非法网址,但想法相同)

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

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

不运行多个preg_match_all

真的很困惑,谢谢您能摆脱的曙光。

此正则表达式将为您提供所需的输出: ((?: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
        )

)

您可以使用以下函数分割字符串:

http://de.php.net/preg_split

每个部分可以包含例如结果中给定的数组中的网址之一。

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

$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";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM