Простое регулярное выражение PHP

#php #regex #zend-framework #routing

#php #регулярное выражение #zend-framework #маршруты

Вопрос:

Я настраиваю Zend_Route (но это все еще просто регулярное выражение), и я хочу сопоставить URL, подобный

 /en/experience/this-is-my-name-and-the-last-is-1-of-id-123456.html
  

Итак, я хочу захватить

 this-is-my-name-and-the-last-is-1-of
  

и

  123456
  

Я пытался

 w{2}/experience/(. )?-(d ).html  
  

но, похоже, это не работает.

Было бы легко, если бы наоборот, например, если бы это был идентификатор имени

 /en/experience/123456-this-is-my-name-and-the-last-is-1-of-id.html
  

Я мог бы использовать

 w{2}/experience/(d )-(. ).html
  

Но это отговорка — так что есть какие-нибудь советы о том, как соответствовать исходному формату?

Комментарии:

1. У меня ваше регулярное выражение работает нормально: rubular.com/r/Ou5N48bV2Q

2. Итак, вы не хотите сопоставить -id- бит? Ваш пример этого не показывает

Ответ №1:

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

 /w{2}/experience/(. ?)-(d ).html
  

Ответ №2:

попробуйте это:
/w{2}/experience/(. )?-(d ).html

zend route внутренне выполняет это:
preg_match('#^/w{2}/experience/(. )?-(d ).html$#i', '/en/experience/this-is-my-name-and-the-last-is-1-of-id-123456.html', $matches);

итак, ваш шаблон совпадает только с косой чертой в начале.