我有一个简单的模式,将文本分成句点:
$text = preg_split("/[\.:!\?]+/", $text);
但我想在数组项目的末尾包含. :
或。!
也就是说,现在为“good:news.everyone!” 我有:
array("good", "news", "everyone", "");
但我想要:
array("good:", "news.", "everyone!", "");
我有一个简单的模式,将文本分成句点:
$text = preg_split("/[\.:!\?]+/", $text);
但我想在数组项目的末尾包含. :
或。!
也就是说,现在为“good:news.everyone!” 我有:
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 Online Function Tester对其进行测试。