Не работает preg_replace

12 3
v_ovan
На сайте с 14.05.2008
Offline
165
1576

Нужно заменить bfilter[brand][0]=28&bfilter[brand][1]=13&bfilter[brand][2]=24&pf[335][0]=17&p=2

на bfilter[brand][]=28&bfilter[brand][]=13&bfilter[brand][]=24&pf[335][]=17&p=2

регулярным выражением.

Т.е. содержимое чётных квадратных скобок нужно очистить от числа, которое там есть, чтобы были пустые скобки. Длина исходной строки не ограничена, числа могут быть разные.

Мне предложили решение:

{$page_href=preg_replace('/\[\d+?\]/i', '[]', $page.href)}

но на сайте оно не работает (проверял и на локальном Openserver и на хостинге).

При этом, на сервисе проверки https://ru.functions-online.com/preg_replace.html все работает.

Может подскажите какое-то другое решение?

Или есть мысли, почему может не работать?

Горящие туры (https://teplo.ru/)
plattoo
На сайте с 12.05.2010
Offline
195
#1

так можно сделать


$string = 'bfilter[brand][0]=28&bfilter[brand][1]=13&bfilter[brand][2]=24&pf[335][0]=17&p=2';

$string = preg_replace('/\[\d\]=/', '[]=', $string);



---------- Добавлено 21.10.2016 в 00:17 ----------

хотя лучше так, если числа могут быть более одного разряда




$string = 'bfilter[brand][0]=28&bfilter[brand][1]=13&bfilter[brand][2]=24&pf[335][0]=17&p=2';

$string = preg_replace('/\[\d{1,10000}\]=/', '[]=', $string);

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#2

Эм...

Может быть:

{

$page_href=preg_replace('/\[\d+?\]/i', '[]', $page_href);

}

Неправильно название переменной и нет точки запятой в конце.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
R
На сайте с 20.02.2015
Offline
59
#3

Вторые четные скобки очистит

preg_replace("#]\[\d+]#", "][]", $string);
v_ovan
На сайте с 14.05.2008
Offline
165
#4
plattoo:
так можно сделать



---------- Добавлено 21.10.2016 в 00:17 ----------

хотя лучше так, если числа могут быть более одного разряда

ситуация та же: в сервисе проверки все ок, а на сайте не работает.

вот фрагмент который правлю:

{foreach from=$paginator->getPageList() item=page}        

{$page_href=preg_replace('/\[\d+?\]/i', '[]', $page.href}
<a href="{$page_href}" {if $page.act}class="act"{/if}>{if $page.class=='left'}&laquo;{$page.n}{elseif $page.class=='right'}{$page.n}&raquo;{else}{$page.n}{/if}</a>
{/foreach}

исходный фрагмент соответствует $page.href

пробовал Ваш вариант $pattern и $replacement использовать, а все равно работать не хочет.

S
На сайте с 30.09.2016
Offline
469
#5

Рабочий вариант:

<?php
$page_href = 'bfilter[brand][0]=28&bfilter[brand][1]=13&bfilter[brand][2]=24&pf[335][0]=17&p=2';
$page_href = preg_replace('/(\[\w+\])\[\d+\]/', '$1[]', $page_href);
echo $page_href;
Ошибки в первичном варианте:

- в $page.href нехорошая точка;

- путаница с простыми и фигурными скобками;

- пропущена точка с запятой;

- лишний вопросительный знак;

- не учтены первые квадратные скобки;

- не учтено, что в первых квадратных скобках могут быть буквы и цифры.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#6

ощущение, что тут дело не в правильности кода, а в том, как работает шаблонизатор.

От какой CMS такое чудо?

R
На сайте с 20.02.2015
Offline
59
#7

LEOnidUKG, smarty вроде, там если память не изменяет надо php код объявлять в блок {php}code..{/php}

А регулярки все рабочие

v_ovan
На сайте с 14.05.2008
Offline
165
#8
LEOnidUKG:
ощущение, что тут дело не в правильности кода, а в том, как работает шаблонизатор.

От какой CMS такое чудо?

readyscript

зато функционал интересный достаточно и цена

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#9
v_ovan:
readyscript

зато функционал интересный достаточно и цена

Ну вот вам первый и косяк. Пробуйте вывести в отдельный файл это всё, и потом применять только переребот уже с обработанными файлами.

S
На сайте с 30.09.2016
Offline
469
#10

Из стартового поста неочевидно было, что это Смарти. Теперь понятно, откуда это чудо с точкой - $page.href. Предупреждать надо, чистый PHP таких шуток не любит.:o

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий