preg_replace с множеством специальных символов

0

Я, как правило, теряю след, когда имею дело с большим количеством специальных персонажей.

У меня есть некоторые URL-адреса (плохо отформатированные, недостаточно последовательные для использования parse_url), и я хочу заменить все вхождения параметров "dead" и/или "dead" = some_text_here ни с чем.

Могут быть и другие переменные до и после.

Примеры URL:

http://www.url.com/?dead?dead=whatever_text&wow=test
http://www.url.com/?hello?dead=whatever_text

Это то, что я думал, будет работать, но это не так.

$parsed_url = preg_replace("/(\?dead(?:=.*?)?)(?:\&|$|\?)/", "", $url);

То, что он должен делать, это проверить "мертвый", с необязательным значением позади, а затем заменить это на ничего. Но это также заменяет? и &, если есть параметр, следующий за параметром? dead. Также его единственное замещение 1, не все.

Это делает

http://www.url.com/?dead?dead=whatever_text&wow=test

Стали

http://www.url.com/dead=whatever_text&wow=test
Теги:

3 ответа

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

Я думаю, вы хотите что-то вроде этой картины?

(\?dead(=[^&]*|))*

Код PHP:

echo preg_replace('/(\?dead(=[^&]*|))*/','',$sourcestring);

Это приведет к выходу ваших данных:

http://www.url.com/&wow=test
http://www.url.com/&wow=test
http://www.url.com/?hello
  • 0
    это работает, великий человек :)
0

Как насчет:

$parsed_url = preg_replace("/\?dead(?:=[^&?]*)?/", "", $url);

preg_replace должен соответствовать всем событиям по умолчанию (по умолчанию параметр $limit -1).

Это регулярное выражение очень похоже на ваше, но вместо .* Оно использует [^&?]* Для соответствия до следующего ? или &

0

Вы можете использовать \Q и \E (как в QuotE), когда имеете дело со множеством специальных символов.

Текст между этими разделителями будет трактоваться буквально.

Ещё вопросы

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