正则表达式匹配大写字母包围的字符串模式

时间:2010-10-20 20:16:07

标签: regex

我需要一个或多个正则表达式来匹配网站的某些无效网址,这些网址在特定模式之后的OR之前具有大写字母。

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

  • 已定义的网站
  • 零或更多大写字母,如果模式后面为零大写字母
  • 模式
  • 零或更多大写字母(如果模式前为零大写字母)

明确示例:

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

提前感谢您的帮助!

马里奥

2 个答案:

答案 0 :(得分:1)

我建议不要一步一步用正则表达式来描述你正在描述的两件事。使用url解析库分别提取路径和主机名组件。你想这样做有几个原因,网址的主机部分可能有一些令人惊讶的东西可能会让你失望,例如,

的主机名
http://website@otherweb/uppeRcase/pattern/upperCase

实际上是otherweb,应排除在外,即使它以website开头。类似地:

http://website/actual/path/component?uppeRcase/pattern/upperCase
即使url具有由大写路径组件包围的模式,也应排除

,因为匹配区域不是路径的一部分。

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

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

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

答案 1 :(得分:0)

要匹配大写字母,您只需[A-Z]。然后围绕其余的规则进行构建。在不知道“网站”和“模式”的确切含义的情况下,很难给出更好的指导。

如果大写字符 在“网站”和“模式”之间以及“模式”之后,此表达式将匹配

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

此表达式将在 大写字母

上显示

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


<强>更新

对@ 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\[\]\-\._+%\$#\~',/]*)*)?)?

* 它在我的所有测试中都有效,但我不能说我是详尽无遗的。