Shell脚本中的REGEX测试始终为False [英] REGEX Test Always False in Shell Script

查看:86
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆