删除两个字符串之间的文本

时间:2019-08-28 16:40:44

标签: php regex

我正在尝试删除include和下一个&之间的文本:

filter[mat]=1&filter[status]=available&include=homeCompetitor,awayCompetitor&sort=scheduled

并得到类似这样的文本:

filter[mat]=1&filter[status]=available&sort=scheduled

我尝试使用以下代码:

function delete_all_between($string)
{
    $beginningPos = strpos($string, $beginning);
    $endPos = strpos($string, $end);
    if ($beginningPos === false || $endPos === false)
        return $string;
}

以及:

preg_replace("/\include[^]+\&/","",$string);

但是没有一个。

该文本也可能具有以下格式:

filter[mat]=1&filter[status]=available&sort=scheduled&include=homeCompetitor,awayCompetitor

我需要从“包含”一词中删除它(在这种情况下,没有&

编辑: 这个问题不会重复,因为该答案对我不起作用!

2 个答案:

答案 0 :(得分:2)

您要处理的字符串具有特定的格式,可以由parse_str进行解析,并可以通过http_build_query重新组合。

<?php

$str = "filter[mat]=1&filter[status]=available&include=homeCompetitor,awayCompetitor&sort=scheduled";
parse_str($str, $output);
unset($output["include"]);
echo http_build_query($output);

答案 1 :(得分:-2)

尝试一下:

preg_replace('/(include(.*)\&)|(\&include([^&]*)$)/i', '', $string)

我通过:

进行了测试
  • filter[mat]=1&filter[status]=available&include=homeCompetitor,awayCompetitor&sort=scheduled

结果: filter[mat]=1&filter[status]=available&sort=scheduled

  • filter[mat]=1&filter[status]=available&include=homeCompetitor,awayCompetitor

结果: filter[mat]=1&filter[status]=available

  • filter[mat]=1&filter[status]=available&INCLUDE=homeCompetitor,awayCompetitor&sort=scheduled

结果: filter[mat]=1&filter[status]=available&sort=scheduled