使用正则表达式模式从url字符串捕获键值对

时间:2015-05-06 00:11:09

标签: php regex parsing php-5.5

我正在尝试使用正则表达式来解析如下所示的字符串:

/subject=hello±@text=something that may contain\@hello.com or a normal sla/sh±@date=blah/somethingelseI don't want to capture after the first/

成:

subject = hello
text =something that may contain\@hello.com or a normal sla/sh
date = blah

理想情况下,我希望能够在第一个'/'之后将字符串拆分为类似'±@'的字符串 - 并且只按该顺序排列该组合。

我环顾四周,当下有以下内容:

([^/±@,= ]+)=([^±@,= ]+)

但这只与'±@'不匹配 - 它匹配@或±。 它也无法应对逃脱的@。 (相反,我得到:text= something that may contain\)。

有更好的方法吗?

由于

1 个答案:

答案 0 :(得分:0)

试试这个:

(?:\/|(?<=±@))(.*?=.*?)(?:±@|$|\/(?!.*±@))

请参阅live demo

一个重要的部分是在尾部斜杠/(?!.*±@)之后的负面展示 - 这意味着&#34;匹配斜杠,但仅当±@ 没有出现在&#34;之后的输入中。

鉴于此输入:

/subject=hello±@text=something that may contain\@hello.com or a normal sla/sh±@date=blah/somethingelseI don't want to capture after the first/

它产生第1组为的匹配:

subject=hello
text=something that may contain\@hello.com or a normal sla/sh
date=blah