bash扩展了正则表达式运算符

时间:2012-09-27 04:49:10

标签: regex bash

我正在尝试使用bash中可用的扩展正则表达式运算符(?,*,+,@ ,!)。手册说我只需用括号括起一个模式列表,然后在左括号前使用操作符。所以,如果我想要一个零或更多的模式:

if [[ "$1" =~ *(a) ]]
then
   echo $1
fi

但这不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:7)

man bash

  

另一个二元运算符=~可用,具有相同的运算符   优先级为==!=。使用时,右边的字符串   运算符被认为是扩展的正则表达式   相应地匹配(如在regex(3)中)。如果返回值为0   字符串匹配模式,否则为1。如果经常   表达式在语法上是不正确的,有条件的   表达式的返回值是2.如果shell选项nocasematch   启用后,将执行匹配,而不考虑情况   字母字符。可以引用该模式的任何部分   强制它匹配为一个字符串。匹配的子串   保存正则表达式中带括号的子表达式   在数组变量BASH_REMATCH中。 BASH_REMATCH的元素   index 0是匹配整个字符串的字符串部分   正则表达式。索引 n BASH_REMATCH元素是   与 n 括号内的子表达式匹配的字符串部分。

我在这里引用了所有内容,因为我认为知道它是有用的。您在右侧使用标准POSIX扩展正则表达式。

特别是,右侧的表达式可能与左操作数的子字符串匹配。因此,要匹配整个字符串,请使用^$个锚点:

if [[ "$1" =~ ^a*$ ]]
then
    echo $1
fi