2013-12-17 2 views
3

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

Match: все страницы, начиная с

http://intranet/ 

Но не начиная с

http://intranet/sites/ and http://intranet/search/ 

И в подкаталоге /Страницы/ Ending с .aspx

Valid sample: 
http://intranet/products/Pages/default.aspx 
Invalid samples: 
http://intranet/Pages/sofus/default.aspx 
http://intranet/sites/products/Pages/default.aspx 
http://intranet/products/Pages/default.aspx# 

Так далеко я сделал это

^http://intranet.*/Pages/.*.aspx+ 

Любая помощь приветствуется.

+0

Может '/ Страницы' быть глубже, чем на один уровень ниже 'intranet'? Кроме того, здесь есть 2 положительных условия: 1. Сопоставьте что-либо «intranet /', которое НЕ '/ sites' или'/search' 2. Совместите вещи в '/ Pages' ТОЛЬКО, если они заканчиваются на' .aspx'. Итак, с 2., хотелось бы ... 'http: // intranet/example/x/y/z' работать, или это должно быть недействительным? – Walls

ответ

4

Узор, как это должно работать:

^http://intranet/(?!sites|search)[^/]+/Pages/.*\.aspx$ 

(?!...) создает то, что известно как negative lookahead assertion и убедитесь, что [^/]+ не начинается с sites или search.

Вот demonstration.

+0

Nice Regex! Я всегда забываю о утверждениях lookahead/lookbehind! – Erik

+0

Абсолютно здорово! Благодарю. – CADmageren

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