在PHP中,我需要将字符串拆分为不带前导“*”的“:”字符。根据前导字符的存在拆分字符串
这是使用爆炸(什么)呢:
$string = "1*:2:3*:4";
explode(":", $string);
output: array("1*", "2", "3*", "4")
不过,我需要的输出是:
output: array("1*:2", "3*:4")
我将如何达到预期的输出?
在PHP中,我需要将字符串拆分为不带前导“*”的“:”字符。根据前导字符的存在拆分字符串
这是使用爆炸(什么)呢:
$string = "1*:2:3*:4";
explode(":", $string);
output: array("1*", "2", "3*", "4")
不过,我需要的输出是:
output: array("1*:2", "3*:4")
我将如何达到预期的输出?
$str = '1*:2:3*:4';
$res = preg_split('~(?<!\*):~',$str);
print_r($res);
将输出
Array
(
[0] => 1*:2
[1] => 3*:4
)
图案基本上说:
分裂由
您可能正在寻找preg_match_all()
而不是explode()
,因为您正在尝试更复杂的拆分,而不是explode()
本身可以处理的。 preg_match_all()
将允许您收集匹配特定模式的字符串的所有部分,使用正则表达式表示。你正在寻找的模式是沿着线的东西:
任何东西,除了:其次是*:其次是什么,但:
所以,试试这个来代替:
preg_match_all('/[^:]+\*:[^:]+/', $string, $matches);
print_r($matches);
它会输出类似于:
Array
(
[0] => Array
(
[0] => 1*:2
[1] => 3*:4
)
)
你应该能够使用我这与您使用explode()
的结果的方式大致相同,即使在数组中添加了维(它将匹配分成'组',并且所有结果都与整个表达式或第一个(第0)组匹配) 。
比我更优雅[冒号不是由星号引线]显然我设法错过'preg_split()'的存在:P – Maccath
@Maccath谢谢。我正在考虑使用['preg_match_all()'](http://php.net/manual/en/function.preg-match-all.php),但后来我记得有这个函数,我很少需要/使用:)干杯。 – inhan