如何匹配正则表达式中的数字

Paw*_* P. 31 regex bash

我试图匹配包含数字的正则表达式的一些行.

Bash版本3.2.25:

#!/bin/bash

s="AAA (bbb 123) CCC"
regex="AAA \(bbb \d+\) CCC"
if [[ $s =~ $regex ]]; then
  echo $s matches $regex
else
  echo $s doesnt match $regex
fi
Run Code Online (Sandbox Code Playgroud)

结果:

AAA (bbb 123) CCC doesnt match AAA \(bbb \d+\) CCC
Run Code Online (Sandbox Code Playgroud)

如果我regex="AAA \(bbb .+\) CCC"说它有效,但它不符合我的要求只匹配数字.

为什么不\d+匹配123

fed*_*qui 49

使用标准字符集或POSIX兼容表示法:

[0-9]    
[[:digit:]]    
Run Code Online (Sandbox Code Playgroud)

如下所示在使用正则表达式查找文件名开头的数字时:

\d并且\w不工作的POSIX正则表达式,你可以使用[:digit:],虽然

所以你的表达应该是以下之一:

regex="AAA \(bbb [0-9]+\) CCC"
#                ^^^^^^
regex="AAA \(bbb [[:digit:]]+\) CCC"
#                ^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

总之,你的脚本可以是这样的:

#!/bin/bash

s="AAA (bbb 123) CCC"
regex="AAA \(bbb [[:digit:]]+\) CCC"
if [[ $s =~ $regex ]]; then
  echo "$s matches $regex"
else
  echo "$s doesn't match $regex"
fi
Run Code Online (Sandbox Code Playgroud)

我们来吧:

$ ./digits.sh
AAA (bbb 123) CCC matches AAA \(bbb [[:digit:]]+\) CCC
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 7

数字表示法\d不适用于您的bash版本.[0-9]改为使用:

regex="AAA \(bbb [0-9]+\) CCC"
Run Code Online (Sandbox Code Playgroud)

  • 哦`grep`默认使用`BRE`所以`+`需要被转义.否则你可以使用`grep -E`来支持上面的扩展正则表达式. (2认同)