2010-09-04 209 views
1

我試圖從PHP中至少包含5個單詞組成的文本中抽取所有句子。假設句句以句號結束,問句或感嘆號,我想出了這個:用正則表達式匹配至少包含n個單詞的句子

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

任何想法,怎麼了?

此外,需要做什麼才能使用UTF-8?

+1

「任何想法, 怎麼了?」究竟發生了什麼?一個錯誤?沒有做你期望的事情? – 2010-09-04 18:16:44

回答

5

\w只匹配單個字符。一個單詞將是\w+。如果你需要至少5個字,你可以這樣做:

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

即至少4個字後面的空間,其次是另一個字,接着一個句點。

+0

+1更快 – bitmask 2010-09-04 18:26:36

0

我同意在此處發佈的解決方案。如果您在PHP中使用preg函數,您可以添加'u'模式修飾符以使其與UTF-8一起工作。 /(\w+\s){4,}\w+[.?!]/u例如

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

此輸出:

實測值匹配的句子:這是一個超過五個單詞句

+0

請注意,您只能使用單個分隔符「爆炸」。該任擇議定書表示句子可以以任何'。?!'結尾。 – casablanca 2010-09-04 18:33:15

相關問題