我在bash regex match string中看到我应该将正则表达式与=〜。
进行比较尝试以下方法:
if [[ "____[9 / 101] Linking" =~ "[0-9]*" ]]; then echo "YES"; fi
没有打印出来......
在没有引号的情况下尝试:
if [[ "____[9 / 101] Linking" =~ [0-9]* ]]; then echo "YES"; fi
它工作正常。但是如果我的正则表达式包含空格(需要引号)怎么办?
答案 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