标签: php regex
我正在尝试用PHP解析字符串中的键值对。 空格分隔符,引用/不引用空格包围 这是我的尝试。
preg_match_all("/(\w+)[\s]*=[\s]*(([^'\s]+)|'([^']*)')/", $text, $matches);
这个问题是它用([^'\ s] +)和'([^'] *)'
进一步改进也允许双引号,但我的任何尝试都失败了。
答案 0 :(得分:6)
使用非捕获组可以提供帮助。它可以作为原始正则表达式中的一个小修改 -
(\w+)[\s]*=[\s]*((?:[^'\s]+)|'(?:[^']*)') ^^ ^^
这使得任何一种值类型都可以在同一组中捕获 演示Here
编辑 - 作为进一步的修改,如果你想在你的值中允许双引号,那么试试这个 -
(\w+)[\s]*=[\s]*((?:[^"'\s]+)|'(?:[^']*)'|"(?:[^"]*)")
演示Here
答案 1 :(得分:0)
您可以使用更简单的正则表达式:
(.*)=(.*)
第1组包含密钥,而第2组包含值。