2010-10-20 149 views
0

我需要一个或多个正则表达式来匹配某个网站的某些无效url,在某个模式之后OR前有大写字母。正则表达式匹配大写字母包围的字符串模式

这些都是结构规则相匹配的无效网址:

  • 定义网站
  • 零或多个大写字母,如果该模式之后零个大写字母
  • 模式
  • 零,或更多大写字母,如果模式之前为零大写字母

要用实例s:

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的角度来看,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”,该模式是一个常见的文件夹名称,如“上传” – Mario 2010-10-20 20:34:14

+1

URL的路径组件可以区分大小写。主机名不是。 – novalis 2010-10-20 20:44:13

+0

@novalis,经过深思熟虑并编辑。 – Brad 2010-10-20 20:49:07

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 

实际上是与第一个示例相同的资源,但包含可能会阻止正则表达式发现它的转义。

一旦你已经提取并转换了路径组件的转义序列,但是,正则表达式可能是一个很好的工具。

+0

非常好的评论,幸运的是在我的情况下URL是consiste。确实,第二种情况是可以发生的,非常感谢! – Mario 2010-10-20 21:05:53