octet = /\d{,2}|1\d{2}|2[0-4]\d|25[0-5]/
ip_regex = /^#{octet}\.#{octet}\.#{octet}\.#{octet}/
上面的正则表达式用于匹配IP地址。我知道\ d用于匹配数字,我也理解ip_regex部分,但在看了一些教程后我仍然无法完全理解八位字节部分。
有人可以开导我吗? {,2}|1
的含义是什么?
答案 0 :(得分:2)
例如
{,2}|1
是什么意思?
您应该查看由|
分隔的部分 - \d{,2}
是一种模式,1\d{2}
是一种模式,等等。这就是它们的含义:
\d{,2}
- 最多2位数字符,即0到99之间的数字1\d{2}
- 数字1后跟2位数字,即数字从100到199 2[0-4]\d
- 2,然后是0到4之间的数字,然后是数字,即200到249之间的数字25[0-5]
- 2,5和0到5之间的数字,即250到255之间的数字当你与|
一起加入时,它是匹配任何这些模式的模式,即0到255之间的数字。
\d{,2}
模式有点不对,因为它也匹配空字符串并允许前导零,这与其他模式不一致。
如果你想检查整个字符串是否与模式匹配,那么正确的版本可能就是这样:
octet = /\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]/
ip_regex = /\A#{octet}\.#{octet}\.#{octet}\.#{octet}\z/
答案 1 :(得分:0)
IP地址中的一个八位字节(以点分八位字符表示)不得超过255.
所以给定/\d{,2}|1\d{2}|2[0-4]\d|25[0-5]/
,将其分开:/ \d{,2} | 1\d{2} | 2[0-4]\d | 25[0-5] /x
第一个剪辑\d{,2}
匹配1位或2位数字。第二个剪辑1\d{2}
匹配100到199之间的任何数字。第三个剪辑2[0-4]\d
匹配200到249之间的任何数字。最后一个剪辑25[0-5]
匹配任意数字。 250和255.把它们放在一起,一个八位字节可以是1到255之间的任何数字。
答案 2 :(得分:0)
有一个非常酷的工具来帮助理解正则表达式:https://regexper.com它为您提供了有限状态自动机,它更直观,易于理解正则表达式。
例如,对于八位字节get:
虽然{,2}
仍然不是很清楚。 a{,2}
表示最大值为2,因此它等于{0,2}
(介于0和2之间)。在常规expresion regexper中更改它会使它更好一点:
现在我觉得它很容易阅读。
另一个尝试正则表达式的好工具是Rubular。