Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带有shopt-s extglob的bash正则表达式_Regex_Bash_Validation - Fatal编程技术网

Regex 带有shopt-s extglob的bash正则表达式

Regex 带有shopt-s extglob的bash正则表达式,regex,bash,validation,Regex,Bash,Validation,我希望验证输入,如下所示: 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"; d

我希望验证输入,如下所示:

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


还有没有更好、更简洁的方法来指定这个正则表达式呢?请尝试以下表达式:

^-[[:digit:]]{1,3}(\.[[:digit:]]{1,4})?[[:space:]](days?|hours?|minutes?|seconds?)$
您不需要为空格指定
{1}


如果您只想在几秒钟内使用小数,那么它会更难看(您可以将
\d
替换为
[:digit:]
,将
\s
替换为
[:space:]
):

因此,模式将是(如果希望确保所有秒值都应该有贴花,请将
\?\d{0,4}
改为
\。\d{1,4}
):


这将允许
NNN.NNNN小时
。我希望只允许在第二个示例中使用小数。实际上,替换了
\d
\s
的示例对我不起作用。但是另一个使用char类的方法工作得很好。
shopt-s extglob
仅在使用
?()进行匹配时才是必需的!(),…
^-\d{1,3}((\.?\d{0,4})?\ssecond|\s(day|hour|minute))s?$
^-[[:digit:]]{1,3}((\.?[[:digit:]]{0,4})?[[:space:]]second|[[:space:]](day|hour|minute))s?$