поиск в строке из массива

Marquis

Новичок
поиск в строке из массива

Задача следующая.
Необходимо в строке $str найти совпадения со значениями из массива $array
Делается это для парсера логов, поэтому на данную операцию нужно выделять минимум ресурсов. Сейчас ароверка наличия производится через регулярки, но т.к. тесты показали "торможение" процесса на этой операции вынужден искать альтернативные пути решения задачи.
Первой что пришло в голову это модификация стандартной функции strpos, вопрос только в том, как правильнее это сделать.

Буду благодарен за любые советы.
 

Денч

Новичок
То есть в массиве $array лежат значения, которые, необходимо отыскать в строке $str, правильно?
А если пройтись по массиве, и искать каждый элемент в строке? Как бы там ни было, а других путей, кроме регулярок и поиска с проходом по массиву вроде бы и нет...
 

Денч

Новичок
А ты сделай вариант с проходом по массиву и поиском совпадений, и протестируй на больших массивах.
И сравни ее работу с работой поиска по регулярке.

Уверен, разница в скорости будет ощутимой, и не в пользу регулярки.
 

Marquis

Новичок
Разница действительно есть, вышло процентов эдак на 25-30 выигрыша по времени при использовании проха по массиву. Так не хотел верить в этот результат, теперь работы на всю ночь. :D
 

Фанат

oncle terrible
Команда форума
Делается это для парсера логов, поэтому на данную операцию нужно выделять минимум ресурсов.
странно.
а на мой взгляд ровно наоборот - уж как раз парсеру-то логов никто не мешает хоть час работать...
 

Marquis

Новичок
уж как раз парсеру-то логов никто не мешает хоть час работать..
Я с этим полностью согласен, собсна его работа и не останавливается. Просто когда это все дело работает на компьютере который не мощнее калькулятора приходится извращаться.
 

Marquis

Новичок
Фанат
Вопрос решился, как всегда ошибка была обнаружена там, где ее совсем не ждеш. Эта самая регулярка генерировалась perl'ом и при некоторых условиях сжирал кучу лишней оп. памяти. В следствии чего и происходили тормоза.
Рано на форум стал постить, ошибка как всегда оказалась в своей же голове.
 
Сверху