[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: preg_match_all
krasilich
Задача такова, найти все вхождения слов из массива в строке.
Вот пример кода

$words = array('иванов', 'закат', 'был');
$string = 'Иванов видел закат. Закат был чертовски красив ';
$matches = array();

foreach($words as $word)
{
preg_match_all('|'.$word.'|iu', $string, $match);
$matches = array_merge($matches, $match[1]);
}


Тоесть нужно получить массив

$matches = array('иванов', 'закат', 'Закат', 'был');


По-идее этот код должен работать (не проверялся, написан на коленке и дан для ознакомления с задачей)

Вопрос в том, как получить этот результат используя одно регулярное выражение, а то чувствую в цикле 20 слов будет обрабатываться полчаса.


Предвижу древний китайский вопрос: анахуа?
Ответ - нужно, для общего развития=)



Спустя 2 часа, 14 минут, 33 секунды (12.01.2010 - 21:42) kirik написал(а):
Ну раз для развития, то вот smile.gif
Свернутый текст
header('Content-Type: text/plain; charset=utf-8');

function regEsc($str)
{
return preg_quote($str, '/');
}

$words = array('иванов', 'закат', 'был');
$string = 'Иванов видел закат. Закат был чертовски красив ';

$words_esc = array_map('regEsc', $words);

preg_match_all('/' . implode('|', $words_esc) . '/iu', $string, $matches);

print_r($matches[0]);

Спустя 29 минут, 41 секунда (12.01.2010 - 22:12) krasilich написал(а):
kirik Я пробовал такую идею, не катит. Находит только первое слово из альтернативы.

Спустя 3 часа, 14 минут, 54 секунды (13.01.2010 - 01:27) kirik написал(а):
Цитата (see_man @ 12.01.2010 - 14:12)
Находит только первое слово из альтернативы.

не понял.. Результат работы скрипта:
Array
(
[0] => Иванов
[1] => закат
[2] => Закат
[3] => был
)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.