如何使用PHP preg_replace()定义精确匹配

如何使用PHP preg_replace()定义精确匹配,php,regex,preg-replace,Php,Regex,Preg Replace,我试图使用PHP preg_replace()从URL中删除一些参数。例如,我需要从下面的URL中删除a[]=1 $my_url = 'www.myhost.com/filter.php?a[]=1&a[]=12&a[]=13&a[]=14' 因此,我使用: $without_filter = preg_replace("/(&)?a\[\]=1/", '', $my_url); 我只想删除a[]=1,但它正在从其他参数中删除包含a[]=1的部分,因此我得到:

我试图使用PHP preg_replace()从URL中删除一些参数。例如,我需要从下面的URL中删除
a[]=1

$my_url = 'www.myhost.com/filter.php?a[]=1&a[]=12&a[]=13&a[]=14'
因此,我使用:

$without_filter = preg_replace("/(&)?a\[\]=1/", '', $my_url);
我只想删除
a[]=1
,但它正在从其他参数中删除包含
a[]=1
的部分,因此我得到:

www.myhost.com/filter.php?234
有人能帮我解决这个问题吗?

怎么样:
/a\[\]=1(&&124;\ b)/

这样,它将捕获
a[]=1
,前提是后面紧跟着
&
或字符串结尾。

关于:
/a\[\]=1(&\b)/


这样,它将捕获
a[]=1
,仅当它后跟
&
或字符串结尾时。

使用
preg\u replace
$limit
参数并将其设置为
1
,这应该只替换一次。假设您的参数总是以这种方式排序:

$without_filter = preg_replace("/(&)?a\[\]=1/", '', $my_url, 1);

使用
preg_replace
$limit
参数,并将其设置为
1
,这样只能替换一次。假设您的参数总是以这种方式排序:

$without_filter = preg_replace("/(&)?a\[\]=1/", '', $my_url, 1);
按照手册页,您可以执行以下操作:

$without_filter = preg_replace("/\&(a\[\]=1)(\&|$)/", '\2', $my_url);
或者。。。您可以始终使用的手册页如下,您可以执行以下操作:

$without_filter = preg_replace("/\&(a\[\]=1)(\&|$)/", '\2', $my_url);


或者。。。您可以始终使用

您可以在末尾添加一个
\b
,以指定需要的“边界”。boundary=非单词字符或行尾/字符串。对于这种特定的字符,您也可以使用str_replace,如果它是您希望执行的静态/简单匹配,这很好。您可能可以在末尾添加一个
\b
,以指定需要的“边界”。boundary=非单词字符或行尾/字符串。对于这种特定的内容,您也可以使用str_replace,如果它是您希望进行的静态/简单匹配,这是很好的。嗯。。。假设url是:example.com/abc?foo=bar&a[]=1,那么我们将有一个尾随和左。@songy,你错了,如果我有
a[]=12&a[]=1&a[]=13&a[]=14
我将得到
a[]=12a[]=13&a[]=14
。请注意,
a[]=12a[]=13
没有
&
分隔符,因此我们将丢失其内容。上一个答案在字符串末尾有一个
&
,但它工作正常。@songy,如果你使用ER
/(&?)a\[\]=1(&&|\b)/
你会得到这个错误,所以最好的ER是
/a\[\]=1(&|\b)/
@MarcioSimao-Hmm。。。我现在同意你的看法;)@MarcioSimao很抱歉我在这里发表了太多的评论。。。我当时想可能只是/a[]=1(&|$)/?因为\b还会包含像“=”这样的字符(或其他非单词字符)。。。可能会出现在urlHmm中。。。假设url是:example.com/abc?foo=bar&a[]=1,那么我们将有一个尾随和左。@songy,你错了,如果我有
a[]=12&a[]=1&a[]=13&a[]=14
我将得到
a[]=12a[]=13&a[]=14
。请注意,
a[]=12a[]=13
没有
&
分隔符,因此我们将丢失其内容。上一个答案在字符串末尾有一个
&
,但它工作正常。@songy,如果你使用ER
/(&?)a\[\]=1(&&|\b)/
你会得到这个错误,所以最好的ER是
/a\[\]=1(&|\b)/
@MarcioSimao-Hmm。。。我现在同意你的看法;)@MarcioSimao很抱歉我在这里发表了太多的评论。。。我当时想可能只是/a[]=1(&|$)/?因为\b还会包含像“=”这样的字符(或其他非单词字符)。。。这可能会出现在URL中。您提供了一个很好的提示,但即使在字符串末尾保留一个
&
,URL也可以在浏览器中工作。所以我认为“优越”的答案更简单。@MarcioSimao啊。。。我忘了这个~:)Thx:)你给了我一个很好的提示,但是即使在字符串的末尾保留了一个
&
,URL也可以在浏览器中工作。所以我认为“优越”的答案更简单。@MarcioSimao啊。。。我忘了这个~:)Thx:)