Bash正则表达式测试两个相似的字符串匹配一个,而不是另一个

时间:2019-07-15 17:34:10

标签: regex bash

一个简单的问题,但我很困惑。我试图匹配几个相似的字符串,最终获得捕获的组。这是代码:

$ 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

这应捕获nlca以及冒号和空格后的描述。谁能看到导致第二次失败的字符串差异?空格实际上是空格,而不是制表符。

1 个答案:

答案 0 :(得分:3)

您拼写错误的[[:alnum:]]。外部方括号将此标记为字符类,内部方括号是此POSIX字符类名称的一部分。

[:alnum:]是一个普通字符类,仅与:alnu或{{ 1}}(方括号内的文本只是一个字符列表;重复项将被忽略)