| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Зачистка повторов в строке |
| Автор: PROme 16.8.2005, 01:42 |
| блин, снова я со своими регами уже частично выучил, но никак не хватает времени значит проблема не столько в сабже, сколько в его оптимальной реализации, т.к. надо будет значительное количество данных обрабатывать нужно: n=>2 пробелов заменять на 1 пробел m=>1 табуляций заменять на 1 пробел n=>1 + m=>1 пробелов + табуляций заменять на 1 пробел как наиболее эффективно это организовать? ЗЫ: все возможные знаки переноса "(\r\n|\n|\r)" из строки сразу удаляются за ненадобностью |
| Автор: Bikutoru 16.8.2005, 09:14 | ||
Первые два пункта и без регов прекрасно делаются:
А вот последний я не очень понял. |
| Автор: PROme 16.8.2005, 10:50 | ||
Bikutoru спасибо, ну это и так ясно... мне интересно, сколько ресурсов на это понадобиться? данных очень много, может есть что-то более прогрессивное?
ну если подряд идет один или более пробел и одна или более табуляция (в любом порядке и последовательности), все это надо заменять одним проблеом |
| Автор: Mal Hack 16.8.2005, 13:19 | ||
А я бы тут регуляркой воспользовался. Чтобы идти по тексту 2 раза.
|
| Автор: Bikutoru 16.8.2005, 15:06 | ||
Тогда то, что я написал, уже должно это сделать. А насчет скорости, str_replace работает намного быстрее, чем preg_replace, но str_replace нужно использовать неоднократно, так что не все так очевидно. Мой совет - поэкспериментируй с разными данными, а результаты выложи сюда... Посмотрим на них и учтем на будующее... |
| Автор: Mal Hack 16.8.2005, 15:39 | ||||||
Хм... Ну вот тебе тест (Я оптимизировал регулярки):
Результат:
Работал с файлом 68 килобайт (200 строк где-то). Файл кода. Его и приаттачиваю. |
| Автор: Bikutoru 16.8.2005, 18:08 |
| Невероятно, но факт! preg_replace быстрее! Даже если убрать циклы! Пробовал с другими файлами текстового содержимого размером от 15Кб до 300Кб - порядок примерно тот же! Интересный факт - результаты работы получаются разными: $string1 != $string2 ! |
| Автор: Mal Hack 16.8.2005, 18:38 | ||
При рэгах \nпробел остается пробелом без перевода строки, у тебя - стирается, почему - не понимаю ЗЫ: А вся фишка тут в модификаторе S (s - больщое).. В принципе еще можно пару заюзать, но не хочу Попробуй без него |