正则表达式匹配至少n个单词的句子

时间:2010-09-04 18:14:15

标签: php regex utf-8

我试图从PHP中包含至少5个单词的文本中提取所有句子。假设句子以句号,问题或感叹号结束,我想出了这个:

 /[\w]{5,*}[\.|\?|\!]/ 

任何想法,出了什么问题?

此外,还需要做些什么来使用UTF-8?

3 个答案:

答案 0 :(得分:5)

\w仅匹配单个字符。一个单词是\w+。如果您需要至少5个单词,您可以执行以下操作:

/(\w+\s){4,}\w+[.?!]/

即。至少4个单词后跟空格,后跟另一个单词后跟句子分隔符。

答案 1 :(得分:0)

我同意此处发布的解决方案。如果您在PHP中使用preg函数,则可以为此添加“u”模式修饰符以使用UTF-8。例如/(\w+\s){4,}\w+[.?!]/u

答案 2 :(得分:0)

没有正则表达式方法:

$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);
}

输出:

  

找到匹配句子:这是一个超过五个单词的句子