Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Неожиданный эффект preg_replace.
Форумы портала PHP.SU » PHP » Регулярные выражения » Неожиданный эффект preg_replace.

Страниц (1): [1]
 

1. shum0531 - 20 Марта, 2020 - 13:36:59 - перейти к сообщению
Доброго времени суток.
Столкнулся с проблемой:

Почему то происходит замена не только в месте где '@@DTAG@@.', но и '\00a0'. В моем случае "\00a0" присутствует в css коде.
Помогите кто знает что это за баг и как его обойти.
2. shum0531 - 20 Марта, 2020 - 18:05:50 - перейти к сообщению
Сам допер почему так)))
Другой вопрос: как запретить использование ссылок в параметре replacement?
3. Строитель - 20 Марта, 2020 - 20:58:42 - перейти к сообщению
shum0531 пишет:
как запретить использование ссылок в параметре replacement?

Не подставлять их в качестве замены. Как же ещё?
4. LIME - 21 Марта, 2020 - 01:13:07 - перейти к сообщению
shum0531 судя по твоему шаблону PCRE тебе совсем и не нужна замена по шаблону
предлагаю str_replace
дешево и сердито
или я чегото недопонял?
Строитель ???
(Добавление)
shum0531 шум я чето недопонял
в чем трабла?
(Добавление)
так стоп
неразрывный пробел
я точно с этим не сталкивался
Строитель, shum0531 вы на пальцах поясните а уж решения я вам выдам будьте уверены
ну не сталкивался я тыщу лет с версткой и текстами
все более по DDD и архитектуре и API
5. shum0531 - 22 Марта, 2020 - 15:08:23 - перейти к сообщению
LIME пишет:
shum0531 судя по твоему шаблону PCRE тебе совсем и не нужна замена по шаблону
предлагаю str_replace
дешево и сердито
или я чегото недопонял?
Строитель ???
(Добавление)
shum0531 шум я чето недопонял
в чем трабла?
(Добавление)
так стоп
неразрывный пробел
я точно с этим не сталкивался
Строитель, shum0531 вы на пальцах поясните а уж решения я вам выдам будьте уверены
ну не сталкивался я тыщу лет с версткой и текстами
все более по DDD и архитектуре и API

Весь прикол в том что str_replace не поддерживает limit, поэтому было принято решение использовать preg_replace.
В итоге решил таким образом:
PHP:
скопировать код в буфер обмена
  1. $replace_references = array('\0', '@@replace_temp@@');
  2. $curr_block = str_replace($replace_references[0], $replace_references[1], $curr_block);
  3. $html = preg_replace("!@@DTAG@@!", $curr_block, $html, 1);
  4. $html = str_replace($replace_references[1], $replace_references[0], $html);

То есть, с начало избавляюсь от ссылок вида "\0," потом preg_replace и после возвращаю "\0" на место.
Как то проще не придумал.))
6. LIME - 22 Марта, 2020 - 15:16:36 - перейти к сообщению
shum0531 а проще и не надо
Если придумалось и работает и проблемы не предвидится, пусть работает.
Простота в решении нужна не ради самой простоты, а чтоб не накосячить. В сложных решениях проще ошибиться.
Все сложные решения типа CQRS это по сути упрощения очень сложного к просто сложному.
Тут вроде норм решение.
Годится.
(Добавление)
А еще есть готовые библы по парсингу стандартных форматов. Учел?
7. shum0531 - 22 Марта, 2020 - 15:38:32 - перейти к сообщению
LIME пишет:
А еще есть готовые библы по парсингу стандартных форматов. Учел?

Делал как то тесты на библиотеки, самый "скоростной" -это текущий)) . А если речь идет о внешних php extension, то тут тоже все сложно. Я дорабатываю чужой сайт, который на скудном хостинге))

 

Powered by ExBB FM 1.0 RC1