情况如下:
我有这个字符串的变化:
['var1' => $var1, 'var2' => $obj->var1['asd']]
[ 'var1' => $var1, 'var2' => $obj->var1 ]
['var1' => $var1, 'var2' => $var2]
我需要比赛$var
,$obj->var1['asd']
和$obj->var1
。
我走到了这么远:
(\$[^,\s\]]+]?)
它几乎可以工作,但最后一种情况却无效。在此处查看其运行情况:regex101.com/r/cI0yP0/3
更新:
感谢您的所有答复。他们都工作得很好。
现在,正如乔指出的那样,可能还有其他情况,例如以下情况。
['var' => $obj->var1->var2[2]->var3['test']->var4]
['var1' => $obj->var1[$obj2->var1['one']]]
['var2' => $obj[3]['var']]
['var3' => $obj->method()]
这将允许您捕获链接在一起的任意数量的变量,并且不包括方括号:
\$(?:(?:(?<!\$)->)?(?:[a-zA-Z]\w*(?:\[[^\[\]]+\])*)(?:\(\))?)+
$obj->var1->var2[2]->method1()->var3['test']['test2']->method2()
例如,这将捕获。
这不支持嵌套的括号。即,$obj->var1[$obj2->var1['one']]
为了平衡括号,您将需要使用适当的解析器
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句