为什么这个正则表达式测试不起作用?

Ank*_*wal 19 regex bash shell

我有这个

echo $line
Thisisaline.
Run Code Online (Sandbox Code Playgroud)

我想知道为什么这不起作用:

if [[ "$line" =~ "[a-zA-Z]+\.$" ]] ; then echo "hello"; fi
Run Code Online (Sandbox Code Playgroud)

以上正则表达式没有输出.

Pet*_*r.O 27

问题是你在使用引号......

在bash正则表达式,也没有必要对报价和moreso,他们不应该被使用(除非你试图匹配报价(在这种情况下,你可以逃脱它\"此外,如果你想在你的模式的空间)...你必须逃避它,(反斜杠之后还有一个空间......

另请注意,要将整行匹配为字母,您必须添加前导^和尾随$,否则它将匹配以下行:123 456 abc. cat and mouse


use*_*own 14

尝试

if [[ $line =~ [a-zA-Z]+\. ]] ; then echo hello; fi
Run Code Online (Sandbox Code Playgroud)


gho*_*g74 2

某些带有 bash 的操作系统版本会为您提供输出。因此,获取更新取决于您。但是,如果没有正则表达式,您可以使用扩展的通配符

shopt -s extglob
case "$line" in
+([a-zA-Z]). ) echo "hello";;
esac
Run Code Online (Sandbox Code Playgroud)

如果没有,请使用不带引号的正则表达式