在PHP中,我需要解析字符串中的参数,如:
{keyword name1=val1 name2='val2' name3="val3"}
最终得到一个像:
这样的数组{
name1 => "val1",
name2 => "val2",
name3 => "val3"
}
可以引用或不引用每个值,并且可以使用单引号或双引号引用。此外,值可能包含空格,标点字符,甚至相反的引号。例如,这可能是一个有效的属性:
name1="Isn't this OK?"
理想情况下,它还允许在值内部使用转义引号,但这只是一个奖励。我希望有一个函数可以像HTML
浏览器解析器在解析HTML
标记上的属性时那样运行。
我的第一个想法是一次一个字符地逐字符串,检查等号后面的字符以查看它是否是引号,然后查找下一个匹配的引号。但这似乎很乏味,而且不是解析字符串的最有效方法。
我见过的使用正则表达式的例子远远超过我的头脑,难以理解,而且对我来说太复杂了。
我也看过使用DOMdocument
的示例,但是当值中有空格或逗号时,它们无法正确解析。
我需要在PHP
中执行此操作,而不是Javascript
。
是否有一个函数(在PHP
中),如果我只传递属性部分,它将返回数组?
答案 0 :(得分:2)
我知道你说你不喜欢正则表达式的解决方案,但我还是会给你一个:)至少人们可以比较任何其他可能的答案,而不是使用正则表达式。
你可以在这里看到并玩弄正则表达式: https://regex101.com/r/cT6bT0/1。 这将尝试在右上角解释你的正则表达式 - 标题为“解释”。
代码:
Array
(
[name1] => val1
[name2] => val2
[name3] => val3
[name4] => Isn't this OK?
[name5] => okay
[name6] => Isn't
[name7] => A "quote"
)
输出:
<slick prev-arrow=".slick-prev" next-arrow=".slick-next">
答案 1 :(得分:0)
使用addslashes()
之类的函数来转义引号。