2013-07-02 4 views
-1

Я пробегаем по всем ссылкам на странице и соответствие их HREF значения по отношению к следующей схеме:Как сделать последнюю часть этого REGEX опциональной?

([^/]+)/([0-9]+)/([^/]+) 

проблема есть 2 типа форматов ссылок на странице:

1. /video/123/slug 
2. /video/123 

Номер 1. получает захваченный штраф с вышеуказанным регулярным выражением, но второй терпит неудачу. Я хочу сделать третий кусок регулярного выражения (slug) дополнительным, чтобы оба формата ссылок возвращали true, когда они совпадали с regex. Как это сделать?

ответ

3

Поместите последний бит в скобках не-захвата группы и добавить ?:

([^/]+)/([0-9]+)(?:/([^/]+))? 
2

Использовать код ?, который делает ваш шаблон дополнительным. Он соответствует либо 0, либо 1 вхождению шаблона.

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

([^/]+)/([0-9]+)(?:/([^/]+))? 
+0

Привет, что делает ':' делать в этом выражении? Благодарю. – 1252748

+0

@thomas. То есть для группы, не связанной с захватом. –

+0

, поэтому ставить '?:' В начале любого набора '()' сделает результат недоступным для ссылки на то, что он фиксирует позже? Означает ли это, что это не нужно? Это стандартный способ сделать это, когда вы знаете, что позже не будете ссылаться на него? Большое спасибо. – 1252748

0

Если вы добавите ?, который должен сделать последнюю часть шаблона необязательной.

Смежные вопросы