匹配包含子域的网址

时间:2012-09-06 14:41:21

标签: java python regex

我希望以下正则表达式匹配包含子域但不匹配没有子域的URL的URL:

"^https?://(?:www\.)?(.*\.lexpress\.fr).*"

即匹配:

http://blah.lexpress.fr/whatever/test.html

不匹配:

http://www.lexpress.fr/whatever/test.html

我在Java和Python中尝试过并且两个URL匹配 - 为什么会这样,我如何才能将表达式更改为仅匹配第一个。

谢谢,

/大卫

3 个答案:

答案 0 :(得分:2)

您需要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',)

答案 1 :(得分:1)

您可以使用:

import re
p = re.compile(r'^https?://((?!www\.).*\.lexpress\.fr).*')
m = p.match('https://www.lexpress.fr')
print m
>>> None 
m = p.match('https://abc.lexpress.fr')
print m.group()
>>> 'https://abc.lexpress.fr.com'

答案 2 :(得分:-1)

试试这个

^(http[s]?://)?(www\.)?[a-zA-Z0-9-\.]+\.(com|org|net|mil|edu|ca|co.uk|com.au|fr|gov|br)\\?[a-zA-Z0-9-\.]*$

你可以匹配任何网址 我们可以测试:test regex here