如何在php中删除字符串的特定部分(冗余查询字符串)?

时间:2017-12-13 06:42:21

标签: php preg-replace

如何从网址中删除多个冗余查询字符串?

因此,如下面的字符串,

地址:

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?

2 个答案:

答案 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=1‌​32?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