正则表达式 - 可选和需要

时间:2013-01-16 13:45:14

标签: regex wildcard

我正在尝试一些正则表达式的东西,我想知道如何做以下事情: 接受:

http://google.com
https://google.com
http://google.com/
https://google.com/
http://google.com/*
https://google.com/*
http://*.google.com
https://*.google.com
http://*.google.com/
https://*.google.com/
http://*.google.com/*
https://*.google.com/*

子域通配符可能只包含[a-z] [A-Z] [0-9]并且是可选的,但如果它在需要后存在一个点。

我来到了:

https?://(www.)google.com/

但我认为这不是正确的工作方式......而且只有www。是可用的。 我希望有人能给我所需的结果,并解释为什么它会这样运作。

谢谢,

丹尼斯

3 个答案:

答案 0 :(得分:6)

我认为这可能是你所追求的:

https?://([a-zA-Z0-9]+\.)?google\.com(/.*)?

this site将帮助您验证正则表达式。这似乎符合您的要求,但您可能希望对最后一部分更具体,因为.*几乎可以匹配。

答案 1 :(得分:3)

http(s)?://([a-zA-Z0-9]+\.)?google\.com(/.*)? 

[这是rmhartog的答案,看起来对我来说是正确的] 我只是想扩大原因 - 问题中提到的问题。 OP请不要接受我的回答,因为我只是扩展前一个人的答案。

http - This must be an exact match
(s)? - ? is zero or one time
://  - This must be an exact match
(    - start of a group
[a-zA-Z0-9] - Defines a character class that allows any of these characters in it.
+    - one or more of these characters must be present, empty set is invalid.
\.   - escapes the dot character (usually . is a wildcard in regex)
)?   - end of the group and the group can appear 0 or one time
google - This must be an exact match
\.   - escapes the dot character (usually . is a wildcard in regex)
com  - This must be an exact match
(    - start of a group
/    - This must be an exact match
.*   - matches any character 0 or more times (this fits anything you can type)
)?   - end of the group and the group can appear 0 or one time

我希望这有助于解释上面的答案,很难将这一切都作为评论。

答案 2 :(得分:0)

作为POSIX ERE:

https?://(\*|([a-zA-Z0-9]+)\.)?google.com

(\*|([a-zA-Z0-9]+)\.)部分表示您有一个*或一个字母数字字符串,然后是一个点。这是可选的,因此后跟一个问号。

您还可以使用POSIX字符类替换范围[a-zA-Z0-9][[:alnum:]],并提供:

https?://(\*|([[:alnum:]]+)\.)?google.com