我想验证输入,如下所示:
NNN days
NNN hours
NNN minutes
NNN.NNNN seconds,它必须是负值,所以前缀是-,复数是可选的。
我的脚本中有shopt -s extglob,我使用的是:
while read;do [[ $REPLY =~ ^-[[:digit:]]{1,3}+[[:space:]]{1}(days?|hours?|minutes?|seconds?)$ ]] && echo "GOOD" || echo "BAD"; done我如何在几秒钟内实现不同的规则,即NNN.NNNN
另外,是否有更好、更干净的方法来指定这个正则表达式,从我已经在做的?
发布于 2014-07-27 12:51:30
尝试以下表达式:
^-[[:digit:]]{1,3}(\.[[:digit:]]{1,4})?[[:space:]](days?|hours?|minutes?|seconds?)$您不需要为空间指定{1}。
如果您希望小数只在秒内使用,那么它将更加丑陋(您可以将\d替换为[[:digit:]],\s替换为[[:space:]]):
^-\d{1,3}((\.?\d{0,4})?\ssecond|\s(day|hour|minute))s?$因此,模式将是(如果希望确保所有秒值都有标记,则将\.?\d{0,4}改为\.\d{1,4} ):
^-[[:digit:]]{1,3}((\.?[[:digit:]]{0,4})?[[:space:]]second|[[:space:]](day|hour|minute))s?$https://stackoverflow.com/questions/24980849
复制相似问题