在 & 但不是 && 处拆分字符串
Split a string at & but not &&
我有一个包含 &
和 &&
的 URI,我只需要在单个 &
分隔符处将它拆分成一个数组,例如query1=X&query2=A&&B&query3=Y
应该打印出来
array(
0 => query1=X
1 => query2=A&&B
2 => query3=Y
)
我知道我可以使用 preg_split
但不知道正则表达式。有人可以帮忙吗?
with preg_match_all
(不是孤立的&符号):
preg_match_all('~[^&]+(?:&&[^&]*)*|(?:&&[^&]*)+~', $uri, $result);
with preg_split
(向前和向后检查 lookarounds):
$result = preg_split('~(?<!&)(?:&&)*+\K&(?!&)~', $uri);
或(当有“&&”时强制模式失败):
$result = preg_split('~&(?:&(*SKIP)(*F))?~', $uri);
没有正则表达式(将“&&”翻译成另一个字符并展开):
$result = explode('&', strtr($uri, ['%'=>'%%', '&&'=>'%']));
$result = array_map(function($i) { return strtr($i, ['%%'=>'%', '%'=>'&&']); }, $result);
另一个预分裂:
preg_split("/(?<!&)&(?!&)/",$uri)
(抓取一个不跟在和号之前或之前的和号)
我有一个包含 &
和 &&
的 URI,我只需要在单个 &
分隔符处将它拆分成一个数组,例如query1=X&query2=A&&B&query3=Y
应该打印出来
array(
0 => query1=X
1 => query2=A&&B
2 => query3=Y
)
我知道我可以使用 preg_split
但不知道正则表达式。有人可以帮忙吗?
with preg_match_all
(不是孤立的&符号):
preg_match_all('~[^&]+(?:&&[^&]*)*|(?:&&[^&]*)+~', $uri, $result);
with preg_split
(向前和向后检查 lookarounds):
$result = preg_split('~(?<!&)(?:&&)*+\K&(?!&)~', $uri);
或(当有“&&”时强制模式失败):
$result = preg_split('~&(?:&(*SKIP)(*F))?~', $uri);
没有正则表达式(将“&&”翻译成另一个字符并展开):
$result = explode('&', strtr($uri, ['%'=>'%%', '&&'=>'%']));
$result = array_map(function($i) { return strtr($i, ['%%'=>'%', '%'=>'&&']); }, $result);
另一个预分裂:
preg_split("/(?<!&)&(?!&)/",$uri)
(抓取一个不跟在和号之前或之前的和号)