#php #регулярные_выражения #url
Помогите с правильным составлением регулярного выражения для preg_replace , точнее мне нужно удалить из строки какой либо параметр GET К примеру, строка cbook.php?idc=n&ids=n&p=2&q=44 из которой мне надо удалить параметр p вне зависимости в какой позиции он стоит, возможно это ?p=2 или же &p=2. Для этого использую такое регулярное выражение: {\?|\&(p=)[0-9]} $s = preg_replace('/{\?|\&(p=)[0-9]}/', '','cbook.php?idc=n&ids=n&p=2&q=44'); Но нормальных результатов оно не дает, что я не правильно составил тут? (делал по учебнику)
Ответы
Ответ 1
Бутор - эти регулярки, проще всего так $http = parse_url('/cbook.php?idc=n&ids=n&p=2&q=44'); parse_str($http['query'], $output); if(isset($output['p'])) { unset($output['p']); } $new = $http["path"] . '?' . http_build_query($output); echo $new; Пример https://repl.it/repls/KlutzyLargePikeОтвет 2
Без регулярных выражений: list($path, $query) = explode('?', 'cbook.php?idc=n&ids=n&p=2&q=44'); parse_str($query, $q); // $q - массив параметров unset($q['p']); $query = http_build_query($q); $url = "{$path}?$query"; echo $url; // cbook.php?idc=n&ids=n&q=44Ответ 3
Для корректного удаления подстроки понадобится шаблон, состоящий из трёх альтернатив: Если удаляемый элемент находится сразу после вопросительного знака, но не является единственным GET-параметром (в этом случае надо оставить знак "?", и удалить знак "&" вместе с удаляемым элементом) Если удаляемый элемент находится сразу после вопросительного знака, и является единственным GET-параметром (в этом случае надо удалить знак "?", и все остальные символы после него) Если удаляемый элемент находится в любой другой позиции подстроки (в этом случае, вместе с удаляемыми символами надо удалять и знак "&", предшествующий удаляемой подстроке) Шаблон будет иметь следующий вид: '~(?<=\?)p=\d+&|&p=\d+|\?p=\d+$~' В комплекте с PHP-функцией он будет выглядеть таким образом: echo preg_replace('~(?<=\?)p=\d+&|&p=\d+|\?p=\d+$~', '', $str); Тестировался на следующих строках: cbook.php?idc=n&ids=n&crop=4&p=2&q=44 cbook.php?idc=n&ids=n&p=2&q=44 cbook.php?p=2&idc=n&ids=n cbook.php?idc=n&p=2 cbook.php?p=2 Посмотреть результаты
Комментариев нет:
Отправить комментарий