Regex для удаления всего после 4-го слеша в URL - PullRequest
1 голос
/ 09 января 2012

Я работаю в PHP с понятными URL-путями в виде:

/2011/09/here-is-the-title
/2011/09/here-is-the-title/2

Мне нужно стандартизировать эти URL-пути, чтобы удалить что-либо после 4 слеша, включая сам слеш. Значение после 4-го слеша иногда является числом, но также может быть любым параметром.

Есть мысли о том, как я мог это сделать? Я думаю, что регулярные выражения могут справиться с этим, но я ужасен с этим. Я также думал, что комбинация strpos и substr могла бы справиться с этим, но не могу понять это.

Ответы [ 4 ]

4 голосов
/ 09 января 2012

Вы можете использовать функцию explode():

$parts  = explode('/', '/2011/09/here-is-the-title/2');
$output = implode('/', array_slice($parts, 0, 4));
2 голосов
/ 09 января 2012

Заменить

%^((/[^/]*){3}).*%g

с $ 1.

см. http://regexr.com? 2vlr8 для живого примера

2 голосов
/ 09 января 2012

Если ваша реализация регулярного выражения поддерживает утверждения произвольной длины, вы можете заменить

(?<=^[^/]*(/[^/]*){3})/.*$

с пустой строкой. Если это не так, вы можете заменить

 ^([^/]*(?:/[^/]*){3})/.*$

с содержимым первой группы захвата. Пример PHP для второго можно найти по адресу ideone.com .

1 голос
/ 09 января 2012

Вы также можете использовать цикл:

result="";
for char c in URL:
    if(c is a slash) count++;
    if(count<4) result=result+c;
    else break;
...