我有一个将文本拆分为句点的简单模式:
$text = preg_split("/[.:!?]+/", $text);
但是我希望在数组项的末尾包含. :
或!
。
也就是说,现在是"好消息。大家!"我有:
array("good", "news", "everyone", "");
但我想要:
array("good:", "news.", "everyone!", "");
开始:
preg_split('/([^.:!?]+[.:!?]+)/', 'good:news.everyone!', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
工作原理:该模式实际上将所有内容都转换为分隔符。然后,要在数组中包含这些分隔符,可以使用PREG_SPLIT_DELIM_CAPTURE
常量。这将返回一个数组,如:
array (
0 => '',
1 => 'good:',
2 => '',
3 => 'news.',
4 => '',
5 => 'everyone!',
6 => '',
);
要清除空值,请使用PREG_SPLIT_NO_EMPTY
。要组合这些常量中的两个或多个,我们使用逐位|
运算符。结果:
array (
0 => 'good:',
1 => 'news.',
2 => 'everyone!'
);
如果您在模式中使用了正向查找,则不使用PREG_SPLIT_DELIM_CAPTURE
。函数将保留分隔符。
$text = preg_split('/(?<=[.:!?])/', 'good:news.everyone!', 0, PREG_SPLIT_NO_EMPTY);
如果使用lookbehind
,它只会查找字符而不匹配。因此,在preg_split()
的情况下,函数不会丢弃该字符。
结果没有PREG_SPLIT_NO_EMPTY
标志:
array (
0 => 'good:',
1 => 'news.',
2 => 'everyone!',
3 => ''
);
结果带有PREG_SPLIT_NO_EMPTY
标志:
array (
0 => 'good:',
1 => 'news.',
2 => 'everyone!'
);
您可以使用这个PHP在线函数测试仪来测试它。