Регулярное выражение для сопоставления предложений, по крайней мере, n слов
Я пытаюсь извлечь все предложения из текста, состоящего, скажем, из 5 слов в PHP. Предполагая, что предложения заканчиваются точкой, вопросом или восклицательным знаком, я пришел к следующему:
/[\w]{5,*}[\.|\?|\!]/
Есть идеи, что не так?
Кроме того, что нужно сделать, чтобы это работало с UTF-8?
3 ответа
\w
соответствует только одному символу. Одно слово будет \w+
, Если вам нужно как минимум 5 слов, вы можете сделать что-то вроде:
/(\w+\s){4,}\w+[.?!]/
то есть как минимум 4 слова, за которыми следуют пробелы, за которыми следует другое слово, за которым следует разделитель предложений.
Я согласен с решением, размещенным здесь. Если вы используете preg-функции в PHP, вы можете добавить модификатор шаблона '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);
}
Это выводит:
Найдено подходящее предложение: это предложение из более чем пяти слов