我需要一个或多个正则表达式来匹配网站的某些无效网址,这些网址在特定模式之后的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
提前感谢您的帮助!
马里奥
答案 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\[\]\-\._+%\$#\~',/]*)*)?)?
* 它在我的所有测试中都有效,但我不能说我是详尽无遗的。