![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
webaliser |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 15.12.2007 Репутация: нет Всего: нет |
Добрый день, уважаемые профессионалы!
Интересует вопрос теоретического характера: Дана текстовая переменная. 1. Нужно произвести поиск фразы по переменной и зафиксировать позиции найденных фраз. 2. Нужно заменить все фразы переменной другой фразой (регистро-чувствительно ![]() 3. Чтение контента между фразами 1 и 2 и его замена. Не скрываю, цель - узкоспециализированный шаблонизатор. Но до этого далеко. Приветствуются не только примеры, но и посылания на правильный поиск и доку ![]() всем спс.! з.ы. Всех с наступащим |
|||
|
||||
Alex13 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 30.12.2005 Где: Новосибирск Репутация: нет Всего: 1 |
webaliser,
1) strpos() 2) str_replace() 3) strstr() + strpos() Если ничего не напутал с именами, то это - то, что вам требуется ![]() -------------------- Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий. Антисоциальный блог. |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: нет Всего: 70 |
Регулярные выражения.
|
|||
|
||||
Alex13 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 30.12.2005 Где: Новосибирск Репутация: нет Всего: 1 |
Daevaorn, так они же, согласно документации, медленнее, чем обычные строковые функции?.. Разве нет?
-------------------- Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий. Антисоциальный блог. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
если просто заменить - то str_replace и правда за глаза хватит.
с другой стороны, не совсем понятно возможно, через регулярные выражения будет яснее. насчет скорости: надеюсь, это было действительно узкое по скорости место, что вместо гибкости ищется наиболее быстрое решение. В слысле, что запрос к БД не возщвращает в 100 раз больше строк, чем нужно, которые затем фильтруются на стороне РНР, вместо БД не используются файлы и прочие огрехи архитектуры убиты, и дело осталось только за оптимизацией на уровне функций... |
|||
|
||||
Alex13 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 30.12.2005 Где: Новосибирск Репутация: нет Всего: 1 |
skyboy, я не возьмусь гарантировать выигрыш в скорости, тк не замерял, но это можно сделать с помощью двух вызовов strpos() и одного substr_replace().
-------------------- Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий. Антисоциальный блог. |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: нет Всего: 70 |
||||
|
||||
Alpha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 29.10.2007 Где: Зеленоград Репутация: нет Всего: 1 |
Alex13, поправьте меня, если я не прав, но
strpos — Возвращает позицию первого вхождения подстроки А Нужно произвести поиск фразы по переменной и зафиксировать позиции найденных фраз.. Это можно добиться например используя preg_match_all с флагом PREG_OFFSET_CAPTURE. По третьему пункту помоему целесообразно использовать preg_replace, тем более что если были совпадения с шаблоном, будет возвращено измененное значение. Ну и, как было сказано выше, гибкость.. |
|||
|
||||
gemaglabin |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 10.2.2008 Репутация: нет Всего: нет |
Для третьей задачи решение может быть двух типов
- копирование текста до конца первой фразы - копирование текста с начала второй фразы и до конца строки - объединение текста вида пункт1 . заменяемый текст . пункт2
или - копирование текста от начала первой фразы до конца второй - использование стандартной функции str_replace вида первая фраза . заменяемый текст . вторая фраза
Средняя скорость выполнения пяти тысяч на моем ноутбуке первого алгоритма 0.1200 сек , второго - 0.1500 сек . Наверное , алгоритмы не самые лучшие , но , думаю , такая мизерная разница неважна. |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |