0

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

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

即匹配:

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

不符合:

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

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

谢谢,

/大卫

4

3 回答 3

2

您需要一个否定的前瞻性断言

"^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',)
于 2012-09-06T14:48:22.343 回答
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'
于 2012-09-06T14:53:04.763 回答
-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

于 2012-09-06T15:04:48.107 回答