我试图匹配包含数字的正则表达式的一些行.
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)
数字表示法\d
不适用于您的bash版本.[0-9]
改为使用:
regex="AAA \(bbb [0-9]+\) CCC"
Run Code Online (Sandbox Code Playgroud)