2010-08-04 2 views
1

мне нужно регулярное выражение (используется в .htaccess) со следующими атрибутами, захватив номер четыре цифры и следующий за ней текст:нужны регулярное выражение, чтобы соответствовать две довольно похожие модели URL

Match:
/9876/text_text_more_text_still_more_text
/8765/1234_text_text_text

не соответствует:
/2010/08/01/text_text_more_text_still_more_text
/2010/08/01/текст-текст-более-текста еще более-текст

До сих пор у меня есть:
/([0-9] +)/([^ - /] +)

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

Заранее спасибо.

ответ

1

Попробуйте это:

^/(\d{4})/(\w+)$ 
+0

Это сработало, спасибо! – AndrewRich

+0

Я не знал, что \ w включил числа, но это определенно работает. Хороший простой шаблон. – Dunderklumpen

+0

\ w включает любой символ «слова», то есть цифры, буквы и подчеркивание. Однако реализации могут отличаться и включать другие символы. – fuwaneko

1

Используйте это регулярное выражение

^/\d{4}/[^/]*?$ 
+0

Важным моментом здесь является начальный и конечный анкеры '^' и '$'. Без них регулярное выражение может соответствовать '/ 2010/08 /' ** '01/text_text' **. – Kobi

+0

Как изменено для захвата двух частей мне нужно: '^/(\ d {4})/([^ /] *?) $' Спасибо! – AndrewRich

0

Если вся строка только URL, вы можете попробовать следующую картину:

^/[0-9]+/(([0-9]{4}_)?[^/]+)$ 

Быстрое объяснение моего подхода

  • ^ представляет собой начало строки, $ конец строки
  • /[0-9] +/ является первым числом URL-
  • ([0-9] { 4} _)? является дополнительным необязательным стартовым четырехзначным числом.
  • [^ /] + будет представлять любые символы, не содержащие косую черту в конце строки.
+0

Я не думаю, что OP хочет захватить второе число, поэтому '([0-9] {4} _)?' Может быть избыточным. – Kobi

+0

На самом деле параны здесь просто позволяют использовать оператор «0» или «1» для четырех чисел. В качестве побочного эффекта они могут быть захвачены, но также могут быть проигнорированы. – Dunderklumpen

+0

Этот не работал для меня. Соответствие было таким, как ожидалось, но вторая часть не была захвачена. – AndrewRich

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