Регулярное выражение для сопоставления предложений, по крайней мере, n слов - PullRequest
1 голос
/ 04 сентября 2010

Я пытаюсь извлечь все предложения из текста, состоящего, скажем, из 5 слов в PHP. Предполагая, что предложения заканчиваются точкой, вопросом или восклицательным знаком, я пришел к следующему:

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

Есть идеи, что не так?

Кроме того, что нужно сделать, чтобы это работало с UTF-8?

Ответы [ 3 ]

5 голосов
/ 04 сентября 2010

\w соответствует только одному символу.Одно слово будет \w+.Если вам нужно как минимум 5 слов, вы можете сделать что-то вроде:

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

, то есть как минимум 4 слова, за которыми следуют пробелы, за которыми следует другое слово, за которым следует разделитель предложений.

0 голосов
/ 04 сентября 2010

Метод без регулярных выражений:

$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 голосов
/ 04 сентября 2010

Я согласен с решением, размещенным здесь. Если вы используете функции preg в PHP, вы можете добавить модификатор шаблона 'u', чтобы он работал с UTF-8. /(\w+\s){4,}\w+[.?!]/u например

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...