2010-10-20 3 views
0

Мне понадобится одно или несколько регулярных выражений для соответствия некоторым недопустимым URL-адресам веб-сайта, которые имеют заглавные буквы перед OR после определенного шаблона.Regexp соответствует строковому шаблону, окруженному заглавными буквами

Таковы правила структуры, чтобы соответствовать Недействительные URL:

  • определенный веб-сайт
  • ноль или более прописные буквы, если нулевые строчные буквы по образцу
  • шаблон
  • нулю, или более прописных букв, если ноль заглавных букв перед рисунком

Чтобы быть явным с примером с:

http://website/uppeRcase/pattern/upperCase   // match it, uppercase before and after pattern 
http://otherweb/WhatevercAse/pattern/whatevercase // do not match, no website 
http://website/lowercase/pattern/lowercase   // do not match, no uppercase before or after pattern 
http://website/lowercase/pattern/uppercasE   // match it, uppercase after pattern 
http://website/Uppercase/pattern/lowercase   // match it, uppercase before pattern 
http://website/WhatevercAse/asdasd/whatEveRcase // do not match it, no pattern 

Заранее благодарим за вашу помощь!

Марио

ответ

0

Чтобы соответствовать прописные буквы, которые вы просто нужно [A-Z]. Затем постройте вокруг себя все остальные правила. Не зная точно, что вы подразумеваете под «веб-сайтом» и «образцом», трудно дать лучшее руководство.

Это выражение будет соответствовать, если прописные символы как между «веб-сайт» и «модель», а также после «шаблон»

^http://website/.*[A-Z]+.*/pattern/.*[A-Z]+.*$

Это выражение выкупают на либо прописной-случае

^http://website/(.*[A-Z]+.*/pattern/.*[A-Z]+.*|.*[A-Z]+.*/pattern/.*|.*/pattern/.*[A-Z]+.*)$


UPDATE:

К @ TokenMacGuy указывают, RegEx разбор URL-адресов может быть очень сложно. Если вы хотите разбить части и затем проверить, вы можете начать с этого выражения, которое должно соответствовать и группировать большинство * URL-адресов.

(?<protocol>(http|ftp|https|ftps):\/\/)?(?<site>[\w\-_\.]+\.(?<tld>([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|arpa|asia|coop|info|jobs|mobi|museum|name|travel))+(?<port>:[0-9]+)?\/?)((?<resource>[\w\-\.,@^%:/~\+#]*[\w\-\@^%/~\+#])(?<queryString>(\?[a-zA-Z0-9\[\]\-\._+%\$#\~',/]*=[a-zA-Z0-9\[\]\-\._+%\$#\~',/]*)+(&[a-zA-Z0-9\[\]\-\._+%\$#\~',/]*=[a-zA-Z0-9\[\]\-\._+%\$#\~',/]*)*)?)?

* он работал во всех моих тестах, но я не могу утверждать, я был исчерпывающим.

+0

веб-сайт, такой как «myintranet.mycompany.com», и шаблон является общим именем папки, например «upload» – Mario

+1

Компонент пути URL-адресов может быть чувствительным к регистру. Имена хостов - нет. – novalis

+0

@novalis, отмеченный и отредактированный. – Brad

1

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

http://[email protected]/uppeRcase/pattern/upperCase 

на самом деле otherweb, и должно быть исключается, хотя он начинается с website.аналогично:

http://website/actual/path/component?uppeRcase/pattern/upperCase 

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

http://website/uppe%52case/%70attern/upper%43ase 

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

После того как вы извлекли и преобразовали escape-последовательности только компонента пути, хотя регулярное выражение, вероятно, является отличным инструментом для использования.

+0

очень хорошие замечания, к счастью, в моем случае URL-адреса являются постоянными. Это правда, что второй случай - это то, что может случиться, спасибо за это! – Mario