在开始和结束括号之间找不到分号的php preg_split

时间:2014-01-07 11:51:42

标签: php regex string preg-split

我正在写一个递归函数,我在正则表达式部分遇到麻烦...

希望有一个善良的人可以帮助......

给出一个包含以下内容的字符串......

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);

没有太多运气:-(

任何参赛者?

非常感谢,

罗伯特

3 个答案:

答案 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);