我试图创建一个匹配ip地址的正则表达式,或者使用网络掩码的ip地址: 类似于8.8.8.8/24
if ! [[ $SOURCE =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] || [[ $SOURCE =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2}$ ]];then
echo ERROR: Invalid Source
exit 1
fi
第一部分匹配良好,第二部分与网络掩码最佳匹配.. 谁知道为什么?
答案 0 :(得分:1)
在单独的变量中定义正则表达式并使用单个模式:
SOURCE="8.8.8.8"
RX="^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(/[0-9]{1,2})?$"
if ! [[ $SOURCE =~ $RX ]];then
echo ERROR: Invalid Source
exit 1
fi
请参阅online demo here。
模式说明:
^
- 字符串开头[0-9]{1,3}\.
- 1到3位数后跟一个文字点[0-9]{1,3}\.[0-9]{1,3}\.
- 与上述相同,2次[0-9]{1,3}
- 1到3位数(这与IP字符串匹配)(/[0-9]{1,2})?
- 可选的(1或0次出现)序列:
/
- 一个斜杠(因为它不是一个特殊的字符,它不需要转义)[0-9]{1,2}
- 1到2位$
- 字符串结束。