我想用regex模仿爆炸功能。 例如:给定字符串:“/ home / index / 6” 我希望能够从这个字符串中获取一个数组:[“home”,“index”,“6”] 不使用爆炸功能。
我试过这段代码:
<?php
$regex = "(/|(/([a-zA-Z]+))+)";
$url = $_GET["url"];
if(preg_match("@" . $regex . "@", $url, $matches)) {
echo "<pre>";
print_r($matches);
echo "</pre>";
}
但它没有用。 有人可以帮我弄这个吗?谢谢:))
答案 0 :(得分:1)
您可以这样做,但要获得多个结果,您需要使用preg_match_all
。在不使用preg_split
的情况下模仿爆炸的最佳方法可能是使用\G
锚点来确保所有匹配都是连续的:
$regex = '~(?:\A|\G/)\K[^/]*~';
if (preg_match_all($regex, $url, $matches)) {
print_r($matches[0]);
要明确的是,使用除explode
以外的其他东西没有任何优势,这是最快的方式,我认为你想做这个练习。
答案 1 :(得分:1)
答案 2 :(得分:0)
您需要使用preg_match_all
函数来执行全局正则表达式匹配。
<?php
$data = "/home/index/6";
$regex = '~(?<=/).*?(?=/|$)~';
preg_match_all($regex, $data, $matches);
print_r($matches);
?>
<强>输出:强>
Array
(
[0] => Array
(
[0] => home
[1] => index
[2] => 6
)
)