在&处拆分一个字符串但不是&&

时间:2016-10-11 01:24:22

标签: php preg-split

我有一个包含&&&的URI,我只需要在单个&分隔符中将其拆分为数组,例如query1=X&query2=A&&B&query3=Y

应该打印出来

array(
0   =>  query1=X
1   =>  query2=A&&B
2   =>  query3=Y
)

我知道我可以使用preg_split,但无法弄清楚正则表达式。有人可以帮忙吗?

2 个答案:

答案 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)

(抓住一个&符号后面没有&符号前面的&符号)