| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > Правильность регулярки |
| Автор: MoLeX 7.2.2012, 07:08 | ||
| Добрый день. Для того, чтобы избавится от повторяющих пробелов и управляющих символов (\r, \n, \t) использую следующее
Верна ли данная конструкция? Сильно ли она прожорлива и как её можно оптимизировать |
| Автор: ayax2005 7.2.2012, 08:10 |
| А зачем вообще это нужно? Контролировать пробелы правильнее на шаге тформирования контента в цмске, это сэкономит ресурсы при отображении; а управляющие символы чем помешали - ума не преложу. Конечно, регулярка на боле-менее объёмный документ потребует времени на обработку. |
| Автор: MoLeX 7.2.2012, 08:34 | ||||
| ayax2005, хотя бы для ответа AJAX. Ответ такого вида уже не обработается
Добавлено через 1 минуту и 8 секунд Ответ генерируется из шаблона, и его лучше писать понятным образом для редактирования
Добавлено через 3 минуты и 57 секунд потом предпочитаю отдавать контент как можно сильнее ужатый - вырезаны лишние пробелы, переводы строк. Это позволяет отдавать контент немного быстрее |
| Автор: ksnk 7.2.2012, 09:04 |
| MoLeX, При кодировании строки в Json, как символ "\n" должен переводится в последовательность символов '\n'. Так что - что-то неправильное с генерацией данных для Ajax - надо бы разобратся К тому-же удалять служебные символы и пробелы из изображения строки может оказаться неправильно. Вдруг строка обязана содержать 5 пробелов? |
| Автор: ksnk 7.2.2012, 09:30 | ||
Кстати, для выкидывания сдвоенных пробелов и пробельных символов лучше использовать такую регулярку
P.S. i - не нужен... |
| Автор: krundetz 7.2.2012, 13:08 | ||||
MoLeX, насчет прожорливости надо тестировать, вот вариант для сравнения вместо твоей первой
попробуй также вот эту, если я правильно помню то она тебе заменить обе твои
зачем два раза спецсимвол указал? |
| Автор: ksnk 7.2.2012, 13:19 | ||||
krundetz, После такой замены правильный json
превращается в неправильный
|
| Автор: krundetz 7.2.2012, 13:24 | ||
хм, счас проверю руками Добавлено через 4 минуты и 31 секунду протестировал, получил следующие
Добавлено через 7 минут и 5 секунд сообразил ты про первый вариант, да там косяк сейчас поправлю, надо "" поменять на " " Добавлено через 8 минут и 54 секунды исправил |
| Автор: ksnk 7.2.2012, 13:38 |
Если указать один - заменен будет каждый пробел. Если два - только нужная сдвоенная комбинация пробельных символов |
| Автор: krundetz 7.2.2012, 14:57 | ||
тогда, в тексте с одиночным вхождением символов "\n" "\t" замена тоже не произойдет |
| Автор: ksnk 7.2.2012, 15:22 | ||||
Да. дествительно... Вот что значит - под Виндой сижу Тогда так
Хотя тут уже сложность регулярки может сожрать всю оптимальность замен В общем - тестировать надо. |
| Автор: krundetz 8.2.2012, 00:22 | ||
ksnk, а такая конструкция:
разве не говорит что количество символов 1 или больше (то есть и 2)? А то что она заменяет пробел на пробел так ничего страшного. Цикл поиска всего с двумя условиями получается, а не с 7 как у тебя в последнем варианте. Что по идее должно работать быстрее. Хотя я за тест. Кстати как тестировать будем? |
| Автор: ksnk 8.2.2012, 01:10 | ||
Моя проигрывает примерно в 1,5 раза. Можно не тестировать. Накладные расходы на сложность регулярки сильно больше накладных расходов на лишние реплейсы... Хотя мой первоначальный вариант немного выигрывает одинокому \s
Добавлено @ 01:11 mkt - функция, вычисляющая время между вызовами mkt |
| Автор: Gold Dragon 8.2.2012, 07:49 | ||
результат:
|
| Автор: krundetz 8.2.2012, 11:25 |
| Gold Dragon, у тебя strlen длина строки в которой встречаются искомые спецсимволы? или количество спецсимволов в строке? |
| Автор: MoLeX 8.2.2012, 11:37 |
| надо все осмыслить |
| Автор: Gold Dragon 8.2.2012, 12:44 |
| krundetz, это код ksnk |
| Автор: krundetz 8.2.2012, 13:27 |
понял, а исходные данные какие брал? |
| Автор: MoLeX 8.2.2012, 13:31 |
| krundetz, они там генерируются) |
| Автор: krundetz 9.2.2012, 09:02 |
спасибо, сразу не увидел, но уже разобрался, попробую вечерком привести собственный вариант теста |