正则表达式在 bash 中失败

正则表达式在 bash 中失败

为什么这个正则表达式在 bash 中不起作用?

 if [[ "$vl" =~ ^ *[{-].* ]]; then

我想匹配任意数量的空格,后跟{or -,以及后面的任何内容。

答案1

当在测试构造中使用时,您需要转义该空间。

if [[ "$vl" =~ ^\ *[{-].* ]]; then

然而,通常认为将正则表达式存储在变量中是更好的做法

pattern='^ *[{-].*'
if [[ "$vl" =~ $pattern ]]; then

另请注意,这将匹配零到无限的空格,因为*已使用,如果您想确保至少有一个空格,您应该使用+

另外,.*末尾也不需要,因为正则表达式不需要匹配整行。

pattern='^ +[{-]'

相关内容