2014-09-23 1 views
0

Вот путь URI Мне нужно разобрать:Regex в течение первых 3-х компонентов пути URI

тамтам/сэм/бета-лес% E2% 84% A2/продукт-а

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

preg_match("/^([\w\/ %\.-]*){3}/", $input_line, $output_array); 

Это почти дает мне то, что я хочу, но это исключает «% E2% 84% A2». Я перестраивал вещи на http://www.phpliveregex.com/, но безрезультатно.

Обратите внимание, что если я попытаюсь просто разобрать полный URL-адрес, скажите mysite.com/tom-tom/sam/beta-forest%E2%84%A2/product-a, то это регулярное выражение доставит мне то, что я хочу:

preg_match ("/^(https?://)?([\da-z.-]+).([az.]{2,6})([/\w %. -] *) {3} // ", $ path, $ output_array);

Мне нужно разобрать маршрут URI, и мне нужно включить знак%. Вздох ..

Edit:

Мой ожидается выход:

tom-tom/sam/beta-forest%E2%84%A2/ 
+0

Что ваш ожидаемый результат? –

+1

Возможно, parse_url может быть вам полезен http://mx1.php.net/manual/es/function.parse-url.php –

+0

@Alx http://regex101.com/r/rD4sO4/2 –

ответ

0

Вы должны должны включать шаблон запуска, чтобы получить первые три компонента.

preg_match("/^(?:[^\/]*\/){3}/", $input_line, $output_array); 

DEMO

+0

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

+0

yep, но это не проблема. –

+0

Правда, просто уродливая и грязная, но опять же предпочтение пользователя. – hwnd

0

Как насчет:

preg_match("~(?:[^/]+/){3}~", $input_line, $output_array); 
Смежные вопросы