一个简单的问题,但我很困惑。我试图匹配几个相似的字符串,最终获得捕获的组。这是代码:
$ my_regex="^# ([:alnum:]+): (.*)$"
$ [[ '# nl: nl-ams1-v1 - Amsterdam / Netherlands #1' =~ $my_regex ]] && printf "yes\n" || printf "no\n"
yes
$ [[ '# ca: ca-mon1-v1 - Montreal / Canada #1' =~ $my_regex ]] && printf "yes\n" || printf "no\n"
no
这应捕获nl
或ca
以及冒号和空格后的描述。谁能看到导致第二次失败的字符串差异?空格实际上是空格,而不是制表符。
答案 0 :(得分:3)
您拼写错误的[[:alnum:]]
。外部方括号将此标记为字符类,内部方括号是此POSIX字符类名称的一部分。
[:alnum:]
是一个普通字符类,仅与:
,a
,l
,n
,u
或{{ 1}}(方括号内的文本只是一个字符列表;重复项将被忽略)