Php正则表达式从数组print_r获取字符串,如string

时间:2012-05-16 04:33:19

标签: php preg-match

我试图在这里列出如何匹配看起来像array printr的字符串。

variable_data[0][var_name]

我想从上面的示例中获得3个字符串,variable_data,0和var_name。 上面的例子保存在DB中,所以我可以重新创建相同的数组结构,但我卡住了。如果字符串(如上所述)在该结构中,则应查找if情况,否则不需要preg_match。

注意:我不想序列化该数组,因为数组'可能'包含一些在反序列化时可能会破坏它的字符,并且我还需要数组中的该值完全可见。

任何具有正版技能的人都可能知道这种方法吗?

解决方案:

(\b([\w]*[\w]).\b([\w]*[\w]).+(\b[\w]*[\w]))

应该跳过Thos 2的第一个索引......但我仍然得到我想要的东西:)

2 个答案:

答案 0 :(得分:1)

不是没有,但你不能这样做..

$result = explode('[', someString);
foreach ($result as $i => $v) {
    $temp = str_replace(']'. ''. $result[$i]);
    //Do something with temp
}

显然你需要根据你正在做的事情来编辑上面的内容,但它非常简单,甚至可以提供相同的灵活性,而且你不需要调用匹配的引擎......

我认为我们不会在这里为人们构建正则表达式...而是请通过视觉辅助工具查看http://regexpal.com/的正则表达式测试人员/构建器。

此外,人们通常不知道如何正确使用它们,然后由其他人为它们创建表达式来培养它们。

请记住,复杂的表达式可能会产生可怕的性能开销,尽管您的请求似乎并不复杂......

然后在强制发布您已完成的RegEx并回答您自己的问题以获得最大1337ne $$之后:)

但是因为我很高兴这是你的奖励:

\[.+\]\[\d+\]

 [a-z]+_[a-z]+\[.+\]\[\d+\]

取决于你想要匹配的字符串(你没有指定),所以我假设所有

两者的表现如下:

arr_var[name][0]; //Matched

arr_var[name]; //Not matched


arr_var[name][0][1];//Matched

arr_var[name][2220][11];//Matched

再次,测试它们并在上述链接中通过视觉帮助理解。

答案 1 :(得分:1)

解决方案:

(\b([\w]*[\w]).\b([\w]*[\w]).+(\b[\w]*[\w]))

应该跳过这两个第一个索引......但我仍然得到我想要的东西:)

修改

以下是改进之一:

$str = "variable[group1][parent][child][grandchild]";
preg_match_all('/(\b([\w]*[\w]))/', $str,$matches);
echo '<pre>';
    print_r($matches);
echo '</pre>';

// Output
Array  
        (  
            [0] => variable  
            [1] => group1  
            [2] => parent  
            [3] => child  
            [4] => grandchild  
        )