我正在写一个递归函数,我在正则表达式部分遇到麻烦...
希望有一个善良的人可以帮助......给出一个包含以下内容的字符串......
setDynamicFields=[product_model=1;attribute_id=10];setDynamicFields=[product_model=1;attribute_id=10];joinTable=suppliers;
我需要用分号来分割它但是我需要忽略在[和]之间找到的那些分号,即setDynamicFields=[product_model=1;attribute_id=10]
应该被分开,以便我可以将setDynamicFields
设置为关键和[product_model=1;attribute_id=10]
作为值
我尝试了以下内容......
$fields = preg_split("/(\b(?!=[\[])[a-zA-Z_][a-zA-Z_0-9]*\b(?![\]]))/",$line);
$fields = preg_split("/(?!=\[)(;)(?!\])/",$line);
没有太多运气:-(
任何参赛者?
非常感谢,罗伯特
答案 0 :(得分:0)
我用
/([^;]*)?=(\[.+?\])|([^;]*?)=(.*?);/g
请参阅example@regex101。
仅当您的输入不在一行时才需要g
- 标志
另外,请不要使用preg_split
,使用preg_match_all
,请参阅this demo(请务必在右侧点击preg_match_all)以获取结果。有关用法的更多信息,请参阅the manual for preg_match_all
。
这将涵盖输入字符串中的两种可能性:[]
是否存在。
答案 1 :(得分:0)
您可以使用:
.*?(\[.*?\])?;
这会将所有内容与分号匹配,可选择使用方括号中的任何内容,直到找到下一个分号
答案 2 :(得分:0)
由开括号和右括号之间未找到的分号分开
如果括号始终是平衡的并且您想要拆分,则可以使用正则表达式:
;(?![^][]*\])
在PHP中编写如下内容:
$fields = preg_split('/;(?![^][]*\])/', $line);