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

时间:2011-05-01 02:57:09

标签: regex bash shell

我有这个

echo $line
Thisisaline.

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

if [[ "$line" =~ "[a-zA-Z]+\.$" ]] ; then echo "hello"; fi

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

3 个答案:

答案 0 :(得分:27)

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

在bash正则表达式中,不需要引号,而且不应该使用它们(除非你试图匹配引号(在这种情况下你可以转义它\")...同样如果你想在你的模式中有一个空格,你必须逃避它,(反斜杠之后还有一个空格......

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

答案 1 :(得分:14)

尝试

if [[ $line =~ [a-zA-Z]+\. ]] ; then echo hello; fi

答案 2 :(得分:2)

某些带有bash的操作系统版本为您提供输出。所以由您来获取您的更新。 但是,如果没有正则表达式,您可以使用扩展的globbing

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

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