我正在尝试在PHP中从字符串中解析键值对。 以空格为分隔符,用空格包围的引号/未引用的文本。 这是我的尝试: preg_match_all("/(\w+)[\s]*=[\s]*(([^'\s]+)|'([^']*)')/", $text, $matches); 这个问题在于它使用 ([^'\s]+) 和 '([^']*)' 填充两个不同的数组。 进一步的改进还可以允许双引号,但是我的所有尝试都失败了。
使用非捕获组可以有所帮助。可以对原始正则表达式进行小的修改 -(\w+)[\s]*=[\s]*((?:[^'\s]+)|'(?:[^']*)') ^^ ^^ 这使得任何值类型都可以被捕获在同一组中。 演示在这里。 编辑 - 作为进一步修改,如果您想要允许在您的值中使用双引号,则尝试这个 - (\w+)[\s]*=[\s]*((?:[^"'\s]+)|'(?:[^']*)'|"(?:[^"]*)") 示例 在此处查看