有人可以分析匹配ips的正则表达式是如何工作的

时间:2013-10-17 23:02:50

标签: regex

'^(([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}做什么

3 个答案:

答案 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.0255.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以获取正则表达式的快速参考