PHP 在冒号前的单词上拆分字符串
PHP split string on word before colon
我有一个看起来像这样的字符串:
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';
我可以写一个函数来找到每个“:”的位置,找到它前面的单词的长度,然后拆分字符串。但我想有更简单的方法使用正则表达式吗?
对于这种工作,我将使用 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
你想要的 1-dim 阵列可以根据要求直接用 preg_split()
实现。 preg_split()
比 preg_match_all
更适合此任务,因为唯一不需要的字符是分隔符 space。 preg_match_all()
创建了一个比您需要的更复杂的数组结构,因此存在访问第一个子数组的额外步骤。
我的模式将拆分每个 space 后跟一个或多个小写字母,然后是冒号的字符串。
代码:(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',
)
我有一个看起来像这样的字符串:
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';
我可以写一个函数来找到每个“:”的位置,找到它前面的单词的长度,然后拆分字符串。但我想有更简单的方法使用正则表达式吗?
对于这种工作,我将使用 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
你想要的 1-dim 阵列可以根据要求直接用 preg_split()
实现。 preg_split()
比 preg_match_all
更适合此任务,因为唯一不需要的字符是分隔符 space。 preg_match_all()
创建了一个比您需要的更复杂的数组结构,因此存在访问第一个子数组的额外步骤。
我的模式将拆分每个 space 后跟一个或多个小写字母,然后是冒号的字符串。
代码:(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',
)