这个正则表达式如何工作?

时间:2015-03-25 17:53:52

标签: regex bash

我想了解“正则表达式”变量中存储的正则表达式(又名正则表达式)是如何工作的?

regex='^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$'

我是bash脚本的新手,并且很难用正则表达式工作!

1-9,0-9,0-4和0-5的数字至少重复两次,这造成了混乱! 谢谢!

2 个答案:

答案 0 :(得分:4)

单独看这个部分:

[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

这是一系列替代方案(由|分隔),在不同的行上:

[1-9]                # Matches 1-9
[1-9][0-9]           # Matches 10-99
1[0-9][0-9]          # Matches 100-199
2[0-4][0-9]          # Matches 200-249
25[0-5]              # Matches 250-255

换句话说,它匹配1到255之间的任何数字。它有点迂回,因为正则表达式没有数字概念,只有字符串。

正则表达式尝试将这些数字中的四个与句点之间的句点进行匹配,以匹配整个IPv4地址。

答案 1 :(得分:0)

看起来有人试图匹配IPv4地址。小组

([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])

匹配1到255之间的数字,然后再匹配0到255之间的数字。

(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}

他们试图用点分隔四个数字。您发布的原始正则表达式并没有逃脱" ."所以它会匹配四组之间的任何角色。从那以后,有人编辑了正则表达式以修复该角色。

正则表达式包含在^$中,以确保字符串包含该字符串。 ^匹配字符串的开头。 $匹配结尾。