Intereting Posts
PHP для написания символов вкладки внутри файла? Zend Framework $ this-> baseUrl () всегда возвращает текущую страницу :( почему Нужна помощь в понимании доктрины многих ко многим саморекламным кодам Как я могу написать в PHP функцию, которая модифицирует массив? Есть ли смысл минимизировать PHP? Запустить функцию PHP на документе? Достигнут максимальный уровень вложенности функции «100», прерванный Почему dir_module НЕ загружается, хотя, очевидно, он загружается в папку httpd.conf и modules? Как проверить, не удалена ли строка в Eloquent? Как найти последний день месяца с даты? генерировать «предложения» для пользователей на основе относительной информации от других пользователей Функции OCI8 не найдены при запуске apache с php5 mysql_pconnect (): ошибка отправки 5 байтов с errno = 32 Разбитая труба Сериализация «Закрытия» не допускается – laravel php numeric array выбирает значения, превышающие число, и меньше, чем другое, и сохраняет его в новом массиве

Извлечь слова из строки с preg_match_all

Я не очень хорошо знаком с регулярным выражением, но я хочу использовать его для извлечения слов из строки.

Слова, которые мне нужны, должны иметь минимум 4 символа, а предоставленная строка может быть utf8.

Пример строки:

Sus azahares presentan gruesos pétalos blancos teñidos de rosa o violáceo en la parte externa, con numerosos estambres (20-40).

Желаемый результат:

Array( [0] => azahares [1] => presentan [2] => gruesos [3] => pétalos [4] => blancos [5] => teñidos [6] => rosa [7] => violáceo [8] => parte [9] => externa [10] => numerosos [11] => estambres ) 

Это работает, если искать слова UTF-8 (по крайней мере, 4 символа в соответствии с спецификациями), состоящий из буквенных символов ISO-8859-15 (что отлично подходит для испанского, а также для английского, немецкого, французского, и т.д.):

 $n_words = preg_match_all('/([a-zA-Z]|\xC3[\x80-\x96\x98-\xB6\xB8-\xBF]|\xC5[\x92\x93\xA0\xA1\xB8\xBD\xBE]){4,}/', $str, $match_arr); $word_arr = $match_arr[0]; 

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

 preg_match_all('/(\S{4,})/i', $str, $m); 

Теперь $m[1] содержит требуемый массив.

Обновить:

Как сказал Гордон, картина также будет соответствовать «(20-40)». Нежелательные номера можно удалить с помощью этого регулярного выражения:

 preg_match_all('/(\pL{4,})/iu', $str, $m); 

Но я думаю, что это работает, только если PCRE скомпилирован с поддержкой UTF-8. См. PHP PCRE (regex) не поддерживает UTF-8? , Однако он работает на моем компьютере.

это должно сделать для вас работу

 function extractCommonWords($string) { $stopWords = array('i','a','about','an','and','are','as','at','be','by','com','de','en','for','from','how','in','is','it','la','of','on','or','that','the','this','to','was','what','when','where','who','will','with','und','the','www'); $string = preg_replace('/\s\s+/i', '', $string); //echo $string, "<br /><br />"; // replace whitespace $string = trim($string); // trim the string $string = preg_replace('/[^a-zA-Z0-9 -_]/', '', $string); // only take alphanumerical characters, but keep the spaces and dashes too… $string = strtolower($string); // make it lowercase preg_match_all('/([a-zA-Z]|\xC3[\x80-\x96\x98-\xB6\xB8-\xBF]|\xC5[\x92\x93\xA0\xA1\xB8\xBD\xBE]){4,}/', $string, $matchWords); $matchWords = $matchWords[0]; foreach($matchWords as $key => $item) { if($item == '' || in_array(strtolower($item), $stopWords) || strlen($item) <= 3) { unset($matchWords[$key]); } } $wordCountArr = array(); if(is_array($matchWords)) { foreach($matchWords as $key => $val) { $val = strtolower($val); if(isset($wordCountArr[$val])) { $wordCountArr[$val]++; } else { $wordCountArr[$val] = 1; } } } arsort($wordCountArr); $wordCountArr = array_slice($wordCountArr, 0, 10); return $wordCountArr; } не function extractCommonWords($string) { $stopWords = array('i','a','about','an','and','are','as','at','be','by','com','de','en','for','from','how','in','is','it','la','of','on','or','that','the','this','to','was','what','when','where','who','will','with','und','the','www'); $string = preg_replace('/\s\s+/i', '', $string); //echo $string, "<br /><br />"; // replace whitespace $string = trim($string); // trim the string $string = preg_replace('/[^a-zA-Z0-9 -_]/', '', $string); // only take alphanumerical characters, but keep the spaces and dashes too… $string = strtolower($string); // make it lowercase preg_match_all('/([a-zA-Z]|\xC3[\x80-\x96\x98-\xB6\xB8-\xBF]|\xC5[\x92\x93\xA0\xA1\xB8\xBD\xBE]){4,}/', $string, $matchWords); $matchWords = $matchWords[0]; foreach($matchWords as $key => $item) { if($item == '' || in_array(strtolower($item), $stopWords) || strlen($item) <= 3) { unset($matchWords[$key]); } } $wordCountArr = array(); if(is_array($matchWords)) { foreach($matchWords as $key => $val) { $val = strtolower($val); if(isset($wordCountArr[$val])) { $wordCountArr[$val]++; } else { $wordCountArr[$val] = 1; } } } arsort($wordCountArr); $wordCountArr = array_slice($wordCountArr, 0, 10); return $wordCountArr; } 

Разверните строку с пробелами (которые создадут массив со всеми словами), а затем проверьте, превышает ли это слово 4 буквы.

 //The string you want to explode $string = "Sus azahares presentan gruesos pétalos blancos teñidos de rosa o violáceo en la parte externa, con numerosos estambres." //explode your $string, which will create an array which we will call $words $words = explode(' ', $string); //for each $word in $words foreach($words as $word) { //check if $word length if larger then 4 if(strlen($word) > 4) { //echo the $word echo $word; } } 

StrLen ();

strlen – Получить длину строки

взорваться ();

explode – Разбить строку по строке

Когда вы используете модификатор u , вы можете использовать следующий шаблон ( demo ):

 preg_match_all('(\w{4,})u', $string, $matches); print_r($matches[0]); 

Модификатор u означает:

u (PCRE_UTF8): Этот модификатор включает дополнительные функции PCRE, которые несовместимы с Perl. Строки шаблонов рассматриваются как UTF-8. Этот модификатор доступен с PHP 4.1.0 или выше в Unix и с PHP 4.2.3 на win32. Срок действия шаблона UTF-8 проверяется с PHP 4.3.5.

 $string = Sus azahares presentan gruesos pétalos blancos teñidos de rosa o violáceo en la parte externa, con numerosos estambres $words = explode(' ', $string); echo $words[0]; echo $words[1]; 

и так далее

Попробуй это:

 $str='Sus azahares presentan gruesos pétalos blancos teñidos de rosa o violáceo en la parte externa, con numerosos estambres (20-40).'; preg_match_all('/([^0-9\s]){4,}/i', $str, $matches); echo '<pre>'; var_dump($matches); echo '</pre>';