这个bash正则表达式比较有什么问题?

时间:2017-11-19 07:01:54

标签: regex bash

我在bash regex match string中看到我应该将正则表达式与=〜。

进行比较

尝试以下方法:

if [[ "____[9 / 101] Linking" =~ "[0-9]*" ]]; then echo "YES"; fi

没有打印出来......

在没有引号的情况下尝试:

if [[ "____[9 / 101] Linking" =~ [0-9]* ]]; then echo "YES"; fi

它工作正常。但是如果我的正则表达式包含空格(需要引号)怎么办?

2 个答案:

答案 0 :(得分:4)

将正则表达式放在变量中。定义变量时可以自由使用引号:

<head>
  <meta http-equiv="refresh" content="3">
</head>

由于$ re="[0-9]*" ; [[ "____[9 / 101] Linking" =~ $re ]] && echo "YES" YES $ re="9 /" ; [[ "____[9 / 101] Linking" =~ $re ]] && echo "YES" YES $re的引用未加引号,因此[[...]]的值被视为正则表达式。但是,引用的$re右侧的任何内容都将被视为文字字符串。

注释

在正则表达式中,与globs相反,=~表示 0 或更多前面的内容。因此即使字符匹配,*也会被视为匹配:

[0-9]*

如果您想匹配一个或多个数字,请使用$ re="[0-9]*" ; [[ "____[a / bcd] Linking" =~ $re ]] && echo "YES" YES $ re="[0-9]" ; [[ "____[a / bcd] Linking" =~ $re ]] && echo "YES" $

答案 1 :(得分:2)

使用\

前面的空格
if [[ "____[9 / 101] Linking" =~ [0-9]*\ /\ [0-9]* ]]; then echo "YES"; fi