我想检查在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
Run Code Online (Sandbox Code Playgroud)
您已接近正确的解决方案。只需稍微调整一下正则表达式(也考虑@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
Run Code Online (Sandbox Code Playgroud)
您可能会被使用/regex/i(javascript)或qr/regex/i(perl)定义不区分大小写的正则表达式对象的其他语言所迷惑。
顺便说一句,使用grep -qi是另一种更可移植的解决方案。干杯。
| 归档时间: |
|
| 查看次数: |
3484 次 |
| 最近记录: |