2017-06-23 69 views
-2

之前,我有一个字符串,它看起来像这样:PHP的分词串冒号

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'; 

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

+3

而正则表达式将帮助你在这里,你应该问自己,如果你不应该解决了设计问题,导致你有 – Burki

+0

你到目前为止尝试过哪种正则表达式? –

+0

@Burki,真的,但我从外部系统获取字符串,所以我必须以某种方式处理它。我还没有尝试过任何正则表达式,但我对它们并没有太多经验。 – johnohod

回答

3

对于这样的工作,我将使用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 
     ) 

) 

说明:

\S+:  : 1 or more NON space followed by colon 
.+?   : 1 or more any character not greedy 
(?=\S+:|$) : lookahead, make sure we have 1 or more NON space followed by colon or end of string 
0

您所需的1调光数组可以是achi根据要求提供preg_split()

我的模式将在每个空格之后分割一个或多个小写字母,然后是冒号,然后是空格。

代码:(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', 
)