带有可选引号的键值对解析

4

我正在尝试在PHP中从字符串中解析键值对。

以空格为分隔符,用空格包围的引号/未引用的文本。

这是我的尝试:

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

这个问题在于它使用 ([^'\s]+) 和 '([^']*)' 填充两个不同的数组。

进一步的改进还可以允许双引号,但是我的所有尝试都失败了。


2
最好将输入和期望的输出示例列出。 - Kamehameha
2个回答

6
使用非捕获组可以有所帮助。可以对原始正则表达式进行小的修改 -
(\w+)[\s]*=[\s]*((?:[^'\s]+)|'(?:[^']*)')
                  ^^           ^^

这使得任何值类型都可以被捕获在同一组中。
演示在这里
编辑 -
作为进一步修改,如果您想要允许在您的值中使用双引号,则尝试这个 -

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

示例 在此处查看


-2

你可以使用一个更简单的正则表达式:

(.*)=(.*)

第一组包含键,而第二组包含值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接