Отрицание в регулярном выражении
Для задач URL-роутинга необходимо было написать регулярное выражение, под которое подходили бы относительные URL вида:
/news/some-long-and-detailed-shortcut-for-news-item/ /news/some-long-and-detailed-shortcut-for-news-item
Но не подходили следующие:
/news/page-2/ /news/delete/42/ /news/edit/42/ /news/add/ /news/add
Часть адреса some-long-and-detailed-shortcut-for-news-item желательно получить в виде отдельной строки и без слеша вне зависимости
от того, указан ли он в адресе.
Для решения задачи необходимо воспользоваться т.н. negative lookahead:
^\/news\/((?!(edit\/|delete\/|add\/|add$|page-\d+\/))(.+?)\/?)$
