'^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
有人可以分解所有部件的工作原理吗?特别是| 1 [0-9] {2}做什么
答案 0 :(得分:6)
(IPv4)IP地址是点四边形,即0到255之间的四个数字。
这个正则表达式的含义是“匹配0到255之间的四个数字,用.
字符分隔。”
正则表达式中的|
字符可以读作“或”,因此每个条目都是:
(
[0-9] # a number between 0 and 9
|[1-9][0-9] # or, a number between 10 and 99
|1[0-9]{2} # or, a number between 100 and 199
|2[0-4][0-9] # or, a number between 200 and 249
|25[0-5] # or, a number between 250 and 255
)
\.) # followed by a dot
{3} # three times
([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]) # followed by the same match, not followed by a dot
因此,这会匹配0.0.0.0
和255.255.255.255
之间的任何内容,即任何有效的IPv4地址。
经过一些搜索,有一个在线工具可以解释正则表达式:http://www.myregextester.com/index.php。在顶部输入您的正则表达式,选中 EXPLAIN 框,然后点击提交。
答案 1 :(得分:1)
它匹配由点分隔的四个数字,其中每个数字介于0到255之间(包括)。
让我们将其分解以便于阅读:
^ # match the start of the string
( # start capturing group 1
(
[0-9]| # either 0-9, or
[1-9][0-9]| # 1-9 followed by 0-9, i.e. 10-99, or
1[0-9]{2}| # 1 followed by 0-9 followed by 0-9, i.e 100-199, or
2[0-4][0-9]| # 2 followed by 0-4 followed by 0-9, i.e. 200-249, or
25[0-5] # 25 followed by 0-5, i.e. 250-255
)
\. # a dot
){3} # repeat capturing group 1, 3 times
(
[0-9]| # either 0-9, or
[1-9][0-9]| # 1-9 followed by 0-9, i.e. 10-99, or
1[0-9]{2}| # 1 followed by 0-9 followed by 0-9, i.e 100-199, or
2[0-4][0-9]| # 2 followed by 0-4 followed by 0-9, i.e. 200-249, or
25[0-5] # 25 followed by 0-5, i.e. 250-255
)
$ # match the end of the string
竖线字符|
是OR
运算符
{n}
表示:“重复n
次之前发生的任何事情”。
你能发现为什么regexp的后半部分存在吗?为什么我们不能重复上半年4
次而不是3
?
答案 2 :(得分:0)
[0-9]接受值的范围。在这种情况下0-9 {}这是正则表达式量词。例如,{2}表示正好2个字符。 |这是OR。例如,a | b是OR b。 ^字符串的开始 $字符串结尾
所以| 1 [0-9] {2}表示数字'1'后跟0-9范围内的2位数。
查看here以获取正则表达式的快速参考