了解为什么此RegEx不起作用

Understanding why this RegEx doesn't work

本问题已经有最佳答案,请猛点这里访问。
1
^10\.\d+\.\d+\.\d+$/g

所以我要创建一个regex,点击所有10.x.x.x地址。(SO 0.0.0.0/8)

我想到了上面的内容。当我在Regex测试网站上测试它时(我试过几次),我找不到匹配的。

据我所知:

它匹配10.x,然后添加上一个并查找x,然后是上一个,然后是x,直到达到完整的10.x.x.x。但是它似乎不起作用。

我相信d会碰到任何数字。

我不明白为什么失败了,因为这对我来说似乎是正确的。

regex测试是错误的,还是我遗漏了什么?


^10\.\d+\.\d+\.\d+$模式在字符串的开头与10匹配,然后是一个点,后跟1+任意数字(x 3次),最后是字符串的结尾。也就是说,这个regex可以与10.100000.234567.345567匹配。

匹配10.xx.xx.xxIPv4地址的regex可以写为

1
/^10(?:\.(?:2[0-4]\d|25[0-5]|[01]?\d\d?)){3}$/

请参阅regex演示。这是一个删节和改编的IP地址,来自UltraPico Expresso。

细节:

  • ^—字符串开始
  • 10—文字10
  • (?:\.(?:2[0-4]\d|25[0-5]|[01]?\d\d?)){3}3个序列({3}属于:
    • \.—文字点
    • (?:2[0-4]\d|25[0-5]|[01]?\d\d?)3个备选方案:
      • 2[0-4]\d2,后面是0-4范围内的一个数字,还有一个数字(200-249)
      • 25[0-5]25后接0-5范围的数字(250-255)
      • [01]?\d\d?01(可选由于?的原因),后跟任意1位和可选1位(0-199)
  • $—串尾


大多数答案都不能解释为什么regex不适用于op。

根据这一点,它将适用于IP地址,尽管它不是特定的IP地址格式。

I've added the m modifier so that the assertions (^ and $) match the start and end of each line (for testing multiple IP addresses).

如果您正在寻找特定的IP地址格式,那么Wiktor Stribi?ew的答案是正确的。


如果您试图匹配的地址类似于10.123.123.123/1

试试这个

1
 10\.\d{1,3}\.\d{1,3}\.\d{1,3}

如果您的地址需要占用整条线路,并在线路上留下空位,那么:

1
 ^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$

这将匹配每个值的值超过255的地址。如果要限制这些值,它会变得更复杂一些。


我宁愿和这个regex一起验证IP地址

10.\d{1,3}.\d{1,3}.\d{1,3}