2015-06-01 2 views
0

Я пытаюсь вычеркнуть запрос страницы, посередине разбиения на страницы страницы.Match regex i url

URL-адрес является

$url = www.example.com?category=computers&page=10 

Regex

$cleanUrl = preg_replace('/page=[0-9,]+&/', '', $url); 

Это не находит совпадение, хотя?

ответ

0

Ваше регулярное выражение не удается, потому что вы ищете амперсанд после параметра page с его значением.

Вы можете сделать амперсанд необязательным, добавив знак вопроса после него.

$url = 'www.example.com?category=computers&page=10'; 
$cleanUrl = preg_replace('/page=[0-9,]+&?/', '', $url); 

Пример, https://regex101.com/r/uW8uV8/1

Для более через регулярное выражение попробовать:

<?php 
$url = 'www.example.com?&category=cat&page=10'; 
$cleanUrl = rtrim(preg_replace('/(&|\?)page=[0-9,]+&?/', '$1', $url), '&?'); 
echo $cleanUrl; 

Это требует функцию rtrim, хотя для удаления клея параметра трейлинг. Это будет приходиться ...

Страницы самого по себе, www.example.com?page=10
Страница в качестве последнего параметра, www.example.com?species=wolf & страницы = 10
Страницы в качестве первого параметра, www.example.com?page=10 & вида = Wolf
страницы в качестве среднего параметра, www.example.com?cat=tom & мышей = канистра & страницы = 10 & вида = Wolf

+1

может быть хорошо, если бы начало выражения соответствовало или? или &, так что что-то вроде 'category = weirdpage = 1000 &' в URL-адресе не завалено в их URL-адресе. Это маловероятно, но может быть хорошо охранять – EdgeCaseBerg

0

Вы должны начать и закончить свой узор с помощью ~. Это будет работать:

preg_replace('~&page=[0-9]+~', '', 'www.example.com?category=computers&page=10'); 
+0

Почему '*'? Похоже, для меня, как и OP, требуется число или запятая после 'page ='. Также почему '~' over '/'? Это просто разделитель. – chris85

+0

Конечно, не * скорее +, потому что будет одна или несколько цифр. Как разделитель ~ и/будет работать. –