Вот пример кода
$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 написал(а):
Ну раз для развития, то вот 

Свернутый текст
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] => был
)