如何从网址中删除多个冗余查询字符串?
因此,如下面的字符串,
地址:
localhost.com/en_ar/body?products_type=235&treatment=132?product_type=235&treatment=132&__from_store=en_bh
结果网址:
localhost.com/en_ar/body?product_type=235&treatment=132&__from_store=en_bh
如果使用php在查询字符串中存在,如何从?content?
之间的字符串中删除第一部分内容。
在我们的案例中,从字符串中删除内容?products_type=235&treatment=132?
。
答案 0 :(得分:2)
您可以使用以下正则表达式(DEMO):
(\?(?<=\?).*(?=\?))
它会查看?
并匹配2 ?
之间的所有内容以及第一?
。
以下PHP代码(DEMO):
$str = "localhost.com/en_ar/body?products_type=235&treatment=132?product_type=235&treatment=132&__from_store=en_bh";
$newStr = preg_replace('/(\?(?<=\?).*(?=\?))/', '', $str);
var_dump($newStr);
答案 1 :(得分:1)
你的网址中是否有1,2或更多“查询串”,我的模式/方法将匹配/消耗所有这些,但只捕获最后一个。因此,实际上只会执行1次替换,替换文本将是捕获的子字符串($1
)。
代码:(Demo)
$url='localhost.com/en_ar/body?abcd?products_type=235&treatment=132?product_type=235&treatment=132&__from_store=en_bh';
echo preg_replace('/(\?[^?]*)+/','$1',$url);
输出:
localhost.com/en_ar/body?product_type=235&treatment=132&__from_store=en_bh
模式说明:(只需14步:Demo)
/ // pattern delimiter
( // start capture group
\? // match a question mark
[^?]* // greedily match zero or more non-question marks
)+ // end capture group -- repeat one or more times
/ // pattern delimiter