PHP preg_replace вырезает мою строку $ subject

0

Я работал над этим проектом, когда столкнулся со следующей проблемой. У меня есть ссылка, которая гласит:

file.php?page=1&color=all&pos=all&nat=all&mine=all&tree=all

Теперь я хотел изменить цвет на "золото", поэтому я осмотрел Google и нашел эту функцию php, называемую preg_replace(). Поэтому я реализовал его в своем коде следующим образом:

$pre='?page=1&color=all&pos=all&nat=all&mine=all&tree=all'; preg_replace('/color=(.*)&/', 'color=gold&', $pre);

По какой-то причине мой вывод равен ?page=1&color=gold&tree=all поэтому кажется, что он срезает середину кода.

Это ссылка, которую я ожидаю в качестве вывода ?page=1&color=gold&pos=all&nat=all&mine=all&tree=all

Может ли кто-нибудь сказать мне, что я делаю неправильно? Благодарю!

Теги:
url
preg-replace

1 ответ

2
Лучший ответ

Регулярные выражения (регулярное выражение) являются жадными. Вы сказали "find color =", а затем "получите столько, сколько сможете, пока не увидите &". То, что вы хотите, "получите столько, сколько сможете, если оно не является". Это было бы:

preg_replace('/color=[^&]*/','color=gold',$pre);

[^ &] Означает "ничего, кроме &". Кроме того, вы не используете совпадение, поэтому вам не нужны скобки.

  • 0
    Вау, чувак, спасибо! Не думал об этом! Идеальное решение :)
  • 0
    Микело, если это сработало для тебя, прими это как ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню