包含多个(通配符)URI,排除正则表达式中的子域


Include multiple (wildcard) URIs, exclude subdomains in regular expression

希望您能帮助我格式化正确的RegEx。

我想:


1) 包括所有到domain.com(.*)的流量

  • 排除所有子域
  • 除了到特定URIsub.domain.com/文件夹(.*)的所有流量

2) 包括到特定URI-extdomain.com/folder(.*)的所有流量

一些示例:

包括:

  • domain.com
  • domain.com/team
  • domain.com/blog
  • 具体:hello.main.com/bonjour
  • 具体:bye.extdomain.com/aurevoir/salut

排除:

  • 你好.domain.com
  • 再见.domain.com
  • 所有其他子域&其他站点

已经尝试了以下内容,但它仍然包括子域:

(domain'.com|sub'.domain'.com/folder(.*)|sub'.domain'.com/folder(.*))

正则表达式/domain'.com/将匹配任何子域,因为它将匹配字符串的一部分。使用/^domain'.com/只捕获以"domain.com"开头的字符串(没有子域)。

请注意,这假设您从url(http://)中删除了协议。

你发布的RegEx的第二部分与第三部分相同-我想你指的是两种特殊情况-他们也需要"^"开头的

不需要末尾的(.*)-如果没有它,它将与字符串的一部分匹配。

(^domain'.com|^hello'.domain'.com'/bonjur|'^bye.extdomain'.com'/folder(.*))

解释-接受

  • ^domain'.com-所有以"domain.com"开头的URL(无子域)
  • ^hello'.domain.com-所有以子域"hello.domain.com"开头的URL
  • '^bye.extdomain'.com-所有以"bye.extdomain.com"开头的URL

可选-因为所有3个组件都以相同的方式启动,所以可以提取公共前缀^:

^(domain'.com|hello'.domain'.com'/bonjur|bye'.extdomain'.com'/folder2)

有关阅读正则表达式的帮助,请访问此网站:http://www.regexper.com/#%5E(域%5C.com%7你好%5C.domain%5C.com%5C%2Bonjur%7再见%5C.extdomain%5C.com.5C%2Folder2)

我建议使用以下正则表达式:

'#'b(?:domain'.com|hello'.domain'.com/bonjour|bye'.extdomain'.com/aurevoir/salut)'b#i'

我在正则表达式的开头添加了一个"^",要求字符串以domain.com开头。在第二个子句中,它允许domain.com后面的文件夹。第三个子句允许子域上的任何内容,前提是它后面有一个"/"和一些文本。

(^domain'.com$|^domain'.com'/'w*|'w*'.domain'.com'/'w*)