我試圖從PHP中至少包含5個單詞組成的文本中抽取所有句子。假設句句以句號結束,問句或感嘆號,我想出了這個:用正則表達式匹配至少包含n個單詞的句子
/[\w]{5,*}[\.|\?|\!]/
任何想法,怎麼了?
此外,需要做什麼才能使用UTF-8?
我試圖從PHP中至少包含5個單詞組成的文本中抽取所有句子。假設句句以句號結束,問句或感嘆號,我想出了這個:用正則表達式匹配至少包含n個單詞的句子
/[\w]{5,*}[\.|\?|\!]/
任何想法,怎麼了?
此外,需要做什麼才能使用UTF-8?
\w
只匹配單個字符。一個單詞將是\w+
。如果你需要至少5個字,你可以這樣做:
/(\w+\s){4,}\w+[.?!]/
即至少4個字後面的空間,其次是另一個字,接着一個句點。
+1更快 – bitmask 2010-09-04 18:26:36
我同意在此處發佈的解決方案。如果您在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);
}
此輸出:
實測值匹配的句子:這是一個超過五個單詞句
請注意,您只能使用單個分隔符「爆炸」。該任擇議定書表示句子可以以任何'。?!'結尾。 – casablanca 2010-09-04 18:33:15
「任何想法, 怎麼了?」究竟發生了什麼?一個錯誤?沒有做你期望的事情? – 2010-09-04 18:16:44