Я работал над этим проектом, когда столкнулся со следующей проблемой. У меня есть ссылка, которая гласит:
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
Может ли кто-нибудь сказать мне, что я делаю неправильно? Благодарю!
Регулярные выражения (регулярное выражение) являются жадными. Вы сказали "find color =", а затем "получите столько, сколько сможете, пока не увидите &". То, что вы хотите, "получите столько, сколько сможете, если оно не является". Это было бы:
preg_replace('/color=[^&]*/','color=gold',$pre);
[^ &] Означает "ничего, кроме &". Кроме того, вы не используете совпадение, поэтому вам не нужны скобки.