我想检查是否在stdin中传递参数以查看它们是否符合有效的java包名称。我的正则表达式工作不正常。使用以下代码传入com.example.package,我收到错误消息。我不确定我的正则表达式有什么问题?
regex="/^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$/i"
17 if ! [[ $1 =~ $regex ]]; then
18 >&2 echo "ERROR: invalid package name arg 1: $1"
19 exit 2
20 fi
答案 0 :(得分:4)
答案 1 :(得分:4)
您非常接近正确的解决方案。只需稍微调整正则表达式(也考虑@ fede的简单正则表达式)并设置nocasematch
选项以进行不区分大小写的匹配。例如:
regex='^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$'
shopt -s nocasematch
if ! [[ $1 =~ $regex ]]; then
exit 2
fi
shopt -u nocasematch
您可能被其他使用/regex/i
(javascript)或qr/regex/i
(perl)的语言误导,以定义不区分大小写的正则表达式对象。
顺便说一句,使用grep -qi
是另一种更便携的解决方案。干杯。