PHP:用正则表达式模仿爆炸

时间:2014-10-19 10:46:30

标签: php regex

我想用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>";
}

但它没有用。 有人可以帮我弄这个吗?谢谢:))

3 个答案:

答案 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)

([^\/]+)

您可以尝试此操作。使用search代替match。请参阅演示。

http://regex101.com/r/wQ1oW3/11

答案 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
        )
)