前置知识是Linux的基本正则表达式,和扩展正则表达式,即:
POSIX基础正则表达式(basic regular expression,BRE)
POSIX扩展正则表达式(extended regular expression,ERE)
1. 分析问题
这个问题最重要的就是对问题的分析。
合法的十进制IP地址的范围是[0.0.0.0 -255.255.255.255]
IP地址应当是全数字的,以三个“.”划分为4个字段,每个字段是0-255的数字。
对于0到255区间内的数字可以分为5类:
| 分类 | 数字区间 | 匹配模式 |
| 1位数 | 0-9 | [0-9] |
| 2位数 | 10-99 | [1-9][0-9] |
| 1开头的三位数 | 100-199 | 1[0-9]{2} |
| 2开头十位是0到4的三位数 | 200-249 | 2[0-4][0-9] |
| 2开头十位是5的三位数 | 250-255 | 25[0-5] |
2. Linux下匹配模式实现
把IP地址分为四个部分:
| 分类 | 解释 |
| 1 | 第一个部分以数字开头,以“.”结尾 |
| 2 | 第二个部分数字加“.” |
| 3 | 第三个部分数字加“.” |
| 4 | 第四个部分数字结尾 |
判断输出IP地址是否合法的脚本如下:
#!/bash
echo "Please input IP address:"
read tmp
pattern="([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5])"
regstr="^$pattern\.$pattern\.$pattern\.$pattern$"
if [[ $tmp =~ $regstr ]]
then
echo "Right IP!"
else
echo "Bad IP!"
fi
其中,
pattern变量储存数字0到255的匹配模式,双引号不能省略。
regstr变量是整个IP的地址的匹配模式。
if语句中的判断,运算符"=~"左侧写字符串,右侧写匹配模式。注意双中括号“[[]]”里两端各有空格。
演示:

如有错误,谢谢指出!
文章讲述了如何利用Linux的正则表达式(包括BRE和ERE)来分析和验证IP地址的合法性。作者将IP地址分为四个部分,并详细说明了每个部分的数字范围及匹配模式。然后提供了一个bash脚本,该脚本读取用户输入的IP地址并使用正则表达式检查其是否符合0-255的数字格式,从而判断IP地址是否合法。
886

被折叠的 条评论
为什么被折叠?



