preg_replace有很多特殊字符

时间:2015-01-27 01:44:28

标签: php regex

当我处理很多特殊字符时,我往往会失去踪迹。

我有一些网址(格式错误,不足以使用parse_url),我想要替换所有出现的参数?dead和/或?dead = some_text_here什么都没有。

之前和之后可能还有其他变量。

示例网址:

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",后面有一个可选的=值,然后用什么都替换它。但这也取代了?和&amp ;,如果?dead参数后面有参数。它也只是替换了1次,而不是全部。

它使

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

成为

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在处理大量特殊字符时,您可以使用\Q and \E(如在QuotE中)。

这些分隔符之间的文字将按字面处理。

答案 2 :(得分:0)

怎么样:

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

preg_replace应匹配所有出现次数(默认情况下$limit参数为-1。)

此正则表达式与您的正则表达式非常相似,但它使用.*代替[^&?]*进行匹配,直到下一个?&