如何使用preg_replace获取特定字符串?

时间:2014-05-20 10:26:59

标签: php regex preg-replace preg-replace-callback

我想从php中的字符串中获取特定值。以下是字符串

 $string = 'users://data01=[1,2]/data02=[2,3]/*';
 preg_replace('/(.*)\[(.*)\](.*)\[(.*)\](.*)/', '$2', $str);

我想获得data01的价值。我的意思是[1,2]。

如何使用preg_replace实现此目的?

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

preg_replace()是错误的工具,我已经使用了preg_match_all()以防你以后需要其他项目并修剪你的正则表达式以捕获你正在寻找的字符串部分。         

    $string = 'users://data01=[1,2]/data02=[2,3]/*';
    preg_match_all('/\[([0-9,]+)\]/',$string,$match);

    print_r($match);

/*
     print_r($match) output:

        Array
        (
        [0] => Array
            (
                [0] => [1,2]
                [1] => [2,3]
            )
        [1] => Array
            (
                [0] => 1,2
                [1] => 2,3
            )
        )
*/

    echo "Your match: " . $match[1][0];

    ?>

这使您可以拥有捕获的字符或匹配的模式,这样您就可以拥有[1,2]1,2

答案 1 :(得分:0)

preg_replace用于替换内容。 preg_match用于提取内容。

所以你想要:

preg_match('/(.*?)\[(.*?)\](.*?)\[(.*?)\](.*)/', $str, $match);
var_dump($match);

看看你得到了什么,并从那里开始工作。

答案 2 :(得分:0)

preg_replace用于替换正则表达式!

我认为您希望使用preg_match_all()从字符串中获取每个数据属性。

你想要的正则表达式是:

$string = 'users://data01=[1,2]/data02=[2,3]/*';
preg_match_all('#data[0-9]{2}=(\[[0-9,]+\])#',$string,$matches);

print_r($matches);

Array
(
    [0] => Array
        (
            [0] => data01=[1,2]
            [1] => data02=[2,3]
        )


    [1] => Array
        (
            [0] => [1,2]
            [1] => [2,3]
        )

)

我已将此测试为有效。