我希望以下正则表达式能够匹配包含子域的 URL,但不匹配没有子域的 URL:
"^https?://(?:www\.)?(.*\.lexpress\.fr).*"
即匹配:
http://blah.lexpress.fr/whatever/test.html
不匹配:
http://www.lexpress.fr/whatever/test.html
我在 Java 和 Python 中尝试过,两个 URL 都匹配 - 为什么会这样以及我需要如何更改表达式以仅匹配第一个。
谢谢,
/大卫
最佳答案
您需要一个negative look-ahead assertion :
"^https?://(?!www\.)(.*\.lexpress\.fr).*"
这会匹配 ://
字符后不包含 www.
的任何字符串。
Python 演示:
>>> import re
>>> subdomain = re.compile(r"^https?://(?!www\.)(.*\.lexpress\.fr).*")
>>> subdomain.match('http://www.lexpress.fr') is None
True
>>> subdomain.match('http://lexpress.fr') is None
True
>>> subdomain.match('http://subdomain.lexpress.fr').groups()
('subdomain.lexpress.fr',)
>>> subdomain.match('https://nested.subdomain.lexpress.fr').groups()
('nested.subdomain.lexpress.fr',)
关于java - 匹配包含子域的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12302567/