在PHP中,我需要用“:”字符分割字符串而不带前导“*”。
这就是使用explode()的方法:
$string = "1*:2:3*:4";
explode(":", $string);
output: array("1*", "2", "3*", "4")
然而我需要的输出是:
output: array("1*:2", "3*:4")
我如何实现所需的输出?
答案 0 :(得分: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个)组匹配。
答案 1 :(得分:2)
$str = '1*:2:3*:4';
$res = preg_split('~(?<!\*):~',$str);
print_r($res);
将输出
Array
(
[0] => 1*:2
[1] => 3*:4
)
模式基本上说:
由[不是由星号引出的冒号]分割