Shell脚本中的REGEX测试始终为False [英] REGEX Test Always False in Shell Script
本文介绍了Shell脚本中的REGEX测试始终为False的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
尽管它与 $ LIST
值匹配,但此正则表达式在shell脚本中的检查始终为 false
.
This regular expression check in shell script always false
despite it matches with $LIST
values.
#!/usr/bin/env bash
LIST="AB,CD,EF" # Valid value and should print "VALID!"
if [[ ! "$LIST" =~ ^[A-Z]{2}(?:,[A-Z]{2})*$ ]]
then
echo "INVALID"
else
echo 'VALID!'
fi
对于 regex
,某些无效的 $ LIST
值将为 AB,CD,EF,
, AB,CD,ef
.
For the regex
, some of the invalid $LIST
values would be AB,CD,EF,
, AB,CD,ef
.
这可能是什么原因?
推荐答案
您的正则表达式:
^[A-Z]{2}(?:,[A-Z]{2})*$
不兼容POSIX正则表达式,因为BASH正则表达式不支持(?:...)
(非捕获组),它是 POSIX扩展正则表达式.
Is not POSIX regex compliant because (?:...)
(non-capturing group) is not supported in BASH regex which is a POSIX extended regular expression.
改为使用捕获组:
^[A-Z]{2}(,[A-Z]{2})*$
这篇关于Shell脚本中的REGEX测试始终为False的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文