Это регулярное выражение проверяет, есть ли у вас возможность вставлять запись show_pinned_search=1
:
^([^?]+)(?:\??)(?!(?:.*)&?show_pinned_search=1(?:&.*)?$)(.*)$
Шаг за шагом:
([^?]+)(?:\??)
: сопоставить первую часть URL с вопросительным знаком ?
, если есть.Захватывается только та часть, которая находится перед возможным вопросительным знаком (идентификатор группы $1
). (?!(?:.*)&?show_pinned_search=1(?:&.*)?$)
: посмотрите вперед, чтобы убедиться, что show_pinned_search=1
в ведущей части URL (.*)
: получить ведущую часть (у которой, конечно, нет show_pinned_search=1
вхождений) и захватить ее (идентификатор группы $2
).
Затем перейдите к этой замене:
$1?show_pinned_search=1&$2
Хитрость заключается в том, чтобы вставить show_pinned_search=1
сразу после знака вопроса , так что вам не нужно беспокоиться, если есть вопросительный знак или амперсанд &
раньше.
Небольшой недостаток здесь заключается в том, что вы можете получить ведущий амперсанд в вашей строке, если URL не 't end имеет ведущую часть параметра или заканчивается знаком вопроса.Однако это не имеет большого значения .
Рабочая скрипка Regexp101.com .