在 PHP 中,我需要用不带前导“*”的“:”字符分割字符串。
这就是使用 explode() 的作用:
$string = "1*:2:3*:4";
explode(":", $string);
output: array("1*", "2", "3*", "4")
但是我需要的输出是:
output: array("1*:2", "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)组)。
$str = '1*:2:3*:4';
$res = preg_split('~(?<!\*):~',$str);
print_r($res);
将输出
Array
(
[0] => 1*:2
[1] => 3*:4
)
该模式基本上说:
用 [不以星号开头的冒号] 分隔