我试图在这里列出如何匹配看起来像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的第一个索引......但我仍然得到我想要的东西:)
答案 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
)