正则表达式:避免组 - 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
个域,请使用以下内容。
^https?://(?:\w+(?:-\w+)*\.)*domain-name\.com(?=$|/)
^
在行首声明位置
https?
匹配http
或https
(s
可选)
://
字面匹配
(?:\w+(?:-\w+)*\.)*
匹配任意数量的子域。子域不能以 -
开头或结尾,因此此子模式的作用如下:
\w+
匹配一个或多个单词字符
(?:-\w+)*
匹配以下任意次数
-
字面匹配
\w+
匹配一个或多个单词字符
\.
字面上匹配点字符
domain-name\.com
按字面意思匹配 domain-name.com
(?=$|[/?#])
正向前瞻确保行尾或集合中的字符 /?#
跟随
匹配非域-name.com
要匹配非 domain-name.com
域,请使用以下内容。
^https?://(?:\w+(?:-\w+)*\.)*(?!domain-name\.com)[\w-]+\.[\w-]+(?=$|/)
这与第一个模式相同,只是它使用 (?!domain-name\.com)[\w-]+\.[\w-]+
。这匹配任何不匹配 domain-name.com
字面意思
的域
我为 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
个域,请使用以下内容。
^https?://(?:\w+(?:-\w+)*\.)*domain-name\.com(?=$|/)
^
在行首声明位置https?
匹配http
或https
(s
可选)://
字面匹配(?:\w+(?:-\w+)*\.)*
匹配任意数量的子域。子域不能以-
开头或结尾,因此此子模式的作用如下:\w+
匹配一个或多个单词字符(?:-\w+)*
匹配以下任意次数-
字面匹配\w+
匹配一个或多个单词字符
\.
字面上匹配点字符
domain-name\.com
按字面意思匹配domain-name.com
(?=$|[/?#])
正向前瞻确保行尾或集合中的字符/?#
跟随
匹配非域-name.com
要匹配非 domain-name.com
域,请使用以下内容。
^https?://(?:\w+(?:-\w+)*\.)*(?!domain-name\.com)[\w-]+\.[\w-]+(?=$|/)
这与第一个模式相同,只是它使用 (?!domain-name\.com)[\w-]+\.[\w-]+
。这匹配任何不匹配 domain-name.com
字面意思