PHP在冒号前分割字符串

时间:2017-06-23 07:58:11

标签: php string preg-match preg-match-all preg-split

我有一个看起来像这样的字符串:

aaaaa: lorem ipsum bb: dolor sit amet ccc: no pro movet

将字符串拆分为数组并在PHP中获得以下结果的最佳方法是什么?

array[0]='aaaaa: lorem ipsum';
array[1]='bb: dolor sit amet';
array[2]='ccc: no pro movet';

我可以编写一个函数来查找每个“:”的位置,找到它前面的单词的长度,然后分割字符串。但我想使用正则表达式有一种更简单的方法吗?

2 个答案:

答案 0 :(得分:3)

对于这类工作,我会使用TextBlock

preg_match_all

<强>输出:

$str = 'aaaaa: lorem ipsum bb: dolor sit amet ccc: no pro movet';
preg_match_all('/\S+:.+?(?=\S+:|$)/', $str, $m);
print_r($m);

<强>解释

Array
(
    [0] => Array
        (
            [0] => aaaaa: lorem ipsum 
            [1] => bb: dolor sit amet 
            [2] => ccc: no pro movet
        )

)

答案 1 :(得分:0)

您可以根据要求preg_split()获得所需的1-dim数组:

我的模式会在每个空格上拆分字符串,后跟一个或多个小写字母,然后是冒号,然后是空格。

代码:(Demo

$string='aaaaa: lorem ipsum bb: dolor sit amet ccc: no pro movet';
var_export(preg_split('/ (?=[a-z]+: )/',$string));

输出:

array (
  0 => 'aaaaa: lorem ipsum',
  1 => 'bb: dolor sit amet',
  2 => 'ccc: no pro movet',
)