我有这个简单的模式,将文本分成句点
$text = preg_split("/[\.:!\?]+/", $text);
Run Code Online (Sandbox Code Playgroud)
但我想包括.: 要么 !在数组项的末尾
IE现在用于"好:新闻!每个人!" 我有:
array("good", "news", "everyone", "");
Run Code Online (Sandbox Code Playgroud)
但我想要的是:
array("good:", "news.", "everyone!", "");
Run Code Online (Sandbox Code Playgroud)
Eli*_*gem 47
干得好:
preg_split('/([^.:!?]+[.:!?]+)/', 'good:news.everyone!', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
Run Code Online (Sandbox Code Playgroud)
工作原理:模式实际上将所有内容都变成了分隔符.然后,要在数组中包含这些分隔符,可以使用PREG_SPLIT_DELIM_CAPTURE常量.这将返回一个数组,如:
array (
0 => '',
1 => 'good:',
2 => '',
3 => 'news.',
4 => '',
5 => 'everyone!',
6 => '',
);
Run Code Online (Sandbox Code Playgroud)
要摆脱空值,请使用PREG_SPLIT_NO_EMPTY.要组合这些常量中的两个或更多个,我们使用按位运算|符.结果:
array (
0 => 'good:',
1 => 'news.',
2 => 'everyone!'
);
Run Code Online (Sandbox Code Playgroud)
没有用的PREG_SPLIT_DELIM_CAPTURE,如果你用一个积极的回顾后在你的模式.该函数将保留分隔符.
$text = preg_split('/(?<=[.:!?])/', 'good:news.everyone!', 0, PREG_SPLIT_NO_EMPTY);
Run Code Online (Sandbox Code Playgroud)
如果你使用lookbehind,它只会寻找不匹配的角色.因此,在这种情况下preg_split(),该功能不会丢弃该字符.
没有 PREG_SPLIT_NO_EMPTY标志的结果:
array (
0 => 'good:',
1 => 'news.',
2 => 'everyone!',
3 => ''
);
Run Code Online (Sandbox Code Playgroud)
结果与 PREG_SPLIT_NO_EMPTY标志:
array (
0 => 'good:',
1 => 'news.',
2 => 'everyone!'
);
Run Code Online (Sandbox Code Playgroud)