4.1中的bash正则表达式

时间:2015-08-24 14:03:53

标签: regex bash

以下代码在3.5 bash上正常工作,但在4.1

中没有
regex='^WORD\-([^(WORD2)][^[:space:]]{1,}$)|(WORD2[[:space:]][^[:space:]]{2,}$)'

if ! [[ $appname =~ $regex ]]    
  then    
    printf "no match"    
    ct_dev_error=$((ct_dev_error+1))    
fi

任何解决方案?或想法?

1 个答案:

答案 0 :(得分:1)

你的正则表达式可以简化为:

regex='^WORD-(WORD2[[:space:]][^[:space:]]{2,}|[^[:space:]]+)$'

测试一下:

appname='WORD-APP' && [[ $appname =~ $regex ]] && echo "${BASH_REMATCH[0]}"
WORD-APP

appname='WORD-BUD APP' && [[ $appname =~ $regex ]] && echo "${BASH_REMATCH[0]}"

appname='WORD-WORD2 APP' && [[ $appname =~ $regex ]] && echo "${BASH_REMATCH[0]}"
WORD-WORD2 APP

[^(WORD2)]实际上并没有否定WORD2的匹配。它实际上是一个否定字符类,它基本上匹配的单个字符不是此列表(WORD2)中的一个字符。