我有一个包含&
和&&
的URI,我只需要在单个&
分隔符中将其拆分为数组,例如query1=X&query2=A&&B&query3=Y
应该打印出来
array(
0 => query1=X
1 => query2=A&&B
2 => query3=Y
)
我知道我可以使用preg_split
,但无法弄清楚正则表达式。有人可以帮忙吗?
答案 0 :(得分:5)
preg_match_all
(所有这些都不是孤立的&符号):
preg_match_all('~[^&]+(?:&&[^&]*)*|(?:&&[^&]*)+~', $uri, $result);
使用preg_split
(向前和向后检查结果):
$result = preg_split('~(?<!&)(?:&&)*+\K&(?!&)~', $uri);
或(当有“&amp;&amp;&amp;”时强制模式失败):
$result = preg_split('~&(?:&(*SKIP)(*F))?~', $uri);
没有正则表达式(将“&amp;&amp;”翻译成另一个角色并爆炸):
$result = explode('&', strtr($uri, ['%'=>'%%', '&&'=>'%']));
$result = array_map(function($i) { return strtr($i, ['%%'=>'%', '%'=>'&&']); }, $result);
答案 1 :(得分:1)
另一个preg分裂:
preg_split("/(?<!&)&(?!&)/",$uri)
(抓住一个&符号后面没有&符号前面的&符号)