正则表达式:避免组 - url 域名

regex : avoid group - url domain name

我为 re 模块编写了这个正则表达式,据我所知,它按预期工作:

^(https?://)([\w\.-]+)[\./]*(?(1)(domain-name.com))

运行 针对 url 列表,它仅匹配包含 domain-name.com 的那些。但我不明白为什么:

^(https?://)([\w\.-]+)[\./]*(?(1)(!(domain-name.com)))

不return所有其他网址。实际上它永远不会匹配任何东西。

谢谢

pythex

您需要对 ?! 使用否定前瞻而不是 !

^(https?://)([\w\.-]+)[\./]*(?(1)(?!(domain-name.com)))

匹配域名-name.com

要匹配 domain-name.com 个域,请使用以下内容。

See regex in use here

^https?://(?:\w+(?:-\w+)*\.)*domain-name\.com(?=$|/)
  • ^ 在行首声明位置
  • https?匹配httphttpss可选)
  • ://字面匹配
  • (?:\w+(?:-\w+)*\.)* 匹配任意数量的子域。子域不能以 - 开头或结尾,因此此子模式的作用如下:
    • \w+匹配一个或多个单词字符
    • (?:-\w+)* 匹配以下任意次数
      • -字面匹配
      • \w+匹配一个或多个单词字符
    • \.字面上匹配点字符
  • domain-name\.com 按字面意思匹配 domain-name.com
  • (?=$|[/?#]) 正向前瞻确保行尾或集合中的字符 /?# 跟随

匹配非域-name.com

要匹配非 domain-name.com 域,请使用以下内容。

See regex in use here

^https?://(?:\w+(?:-\w+)*\.)*(?!domain-name\.com)[\w-]+\.[\w-]+(?=$|/)

这与第一个模式相同,只是它使用 (?!domain-name\.com)[\w-]+\.[\w-]+。这匹配任何不匹配 domain-name.com 字面意思

的域