[英]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
)
)
您可以使用以下函数分割字符串:
每个部分可以包含例如结果中给定的数组中的网址之一。
如果有更多内容,则可以在全文“工作”时使用回调操作调用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.