键值对使用可选引号进行解析

时间:2014-03-23 15:06:08

标签: php regex

我正在尝试用PHP解析字符串中的键值对。 空格分隔符,引用/不引用空格包围 这是我的尝试。

preg_match_all("/(\w+)[\s]*=[\s]*(([^'\s]+)|'([^']*)')/", $text, $matches);

这个问题是它用([^'\ s] +)和'([^'] *)'

填充两个不同的数组

进一步改进也允许双引号,但我的任何尝试都失败了。

2 个答案:

答案 0 :(得分:6)

使用非捕获组可以提供帮助。它可以作为原始正则表达式中的一个小修改 -

(\w+)[\s]*=[\s]*((?:[^'\s]+)|'(?:[^']*)')
                  ^^           ^^

这使得任何一种值类型都可以在同一组中捕获 演示Here

编辑 -
作为进一步的修改,如果你想在你的值中允许双引号,那么试试这个 -

(\w+)[\s]*=[\s]*((?:[^"'\s]+)|'(?:[^']*)'|"(?:[^"]*)")

演示Here

答案 1 :(得分:0)

您可以使用更简单的正则表达式:

(.*)=(.*)

第1组包含密钥,而第2组包含值。