Preg_replace специальные символы &

Добрый день,

У меня есть ошибка в моем preg_replace. Я хотел бы заменить && только с одним &, а также ?& с ?,

Мой код выглядит так:

$reg = preg_replace("#\&\&#is", "&
        ", $reg);    
$reg = preg_replace("#\?\&#is", "?
        ", $reg);

Не могли бы вы помочь мне исправить это? Я уверен, что это какая-то основная ошибка, так что извините за это...

Спасибо!

2 ответа

Решение

Вам не нужно убегать & только ?

$reg = preg_replace("#&&#", "&", $reg);

$reg = preg_replace("#\?&#", "?", $reg);

Вы можете упростить два регулярных выражения в одно.

echo preg_replace("#([?&])\s*&#", "$1", ' ? &lang=en');

Выход:

 ?lang=en

Ваши модификаторы не имеют смысла, так как вы не используете альфа-символы или .,

Также & это не специальный символ регулярного выражения, просто ?, Если в классе символов ([]) ни то, ни другое не нужно будет заменять.

Regex101 Demo: https://regex101.com/r/iS4mQ0/1

Другие вопросы по тегам