0

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

variable_data[0][var_name]

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

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

任何具有正则表达式技能的人可能知道这种方法吗?

解决方案:

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

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

4

2 回答 2

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

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

于 2012-05-16T04:40:51.960 回答
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  
        )
于 2012-05-17T07:38:38.793 回答