【发布时间】:2010-09-04 18:14:15
【问题描述】:
我正在尝试从包含至少 5 个 PHP 单词的文本中提取所有句子。假设句子以句号、问号或感叹号结尾,我想出了这个:
/[\w]{5,*}[\.|\?|\!]/
任何想法,有什么问题?
另外,需要做什么才能使用 UTF-8?
【问题讨论】:
-
"有什么想法,怎么了?"究竟发生了什么?一个错误?没有达到你的预期?
我正在尝试从包含至少 5 个 PHP 单词的文本中提取所有句子。假设句子以句号、问号或感叹号结尾,我想出了这个:
/[\w]{5,*}[\.|\?|\!]/
任何想法,有什么问题?
另外,需要做什么才能使用 UTF-8?
【问题讨论】:
\w 只匹配单个字符。一个单词就是\w+。如果你需要至少 5 个单词,你可以这样做:
/(\w+\s){4,}\w+[.?!]/
即至少 4 个单词后跟空格,然后是另一个单词,后跟一个句子分隔符。
【讨论】:
我同意此处发布的解决方案。如果您在 PHP 中使用 preg 函数,您可以添加 'u' 模式修饰符以使其与 UTF-8 一起使用。以/(\w+\s){4,}\w+[.?!]/u 为例
【讨论】:
没有正则表达式的方法:
$str = "this is a more than five word sentence. But this is not. Neither this. NO";
$sentences = explode(".", $str);
foreach($sentences as $s)
{
$words = explode(' ', $s);
if(count(array_filter($words, 'is_notempty')) > 5)
echo "Found matching sentence : $s" . "<br/>";
}
function is_notempty($x)
{
return !empty($x);
}
这个输出:
找到匹配的句子:这是一个超过五个单词的句子
【讨论】:
.?!中的任何一个结尾。