正则表达式匹配大写字母包围的字符串模式
我需要一个或多个正则表达式来匹配某个网站的某些无效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
在此先感谢您的帮助!
马里奥
要匹配,你只需要[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\[\]\-\._+%\$#\~',/]*)*)?)?
* 它的工作在我所有的测试,但我不能说我是面面俱到。
我建议不要用一个正则表达式来完成这两件事情。使用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
实际上是与第一个示例相同的资源,但包含可能会阻止正则表达式发现它的转义。
一旦你已经提取并转换了路径组件的转义序列,但是,正则表达式可能是一个很好的工具。
非常好的评论,幸运的是在我的情况下URL是consiste。确实,第二种情况是可以发生的,非常感谢! – Mario 2010-10-20 21:05:53
该网站是一个网站,如“myintranet.mycompany.com”,该模式是一个常见的文件夹名称,如“上传” – Mario 2010-10-20 20:34:14
URL的路径组件可以区分大小写。主机名不是。 – novalis 2010-10-20 20:44:13
@novalis,经过深思熟虑并编辑。 – Brad 2010-10-20 20:49:07