正则表达式可变长度

时间:2014-09-26 08:08:45

标签: regex bash

在Bash中,我们可以匹配不同长度的字符串吗? 例如,

regex="FOO[0-9]{5}"
if [[ $1 =~ ${regex} ]]

将匹配FOO1111或FOO98765 ...

但我们如何匹配FOO1,FOO123和FOO12345? regex="FOO[0-9]{1-5}"无效。

有没有办法以简单的方式或我们只是使用:

regex5="FOO[0-9]{5}"
regex4="FOO[0-9]{4}"
regex3="FOO[0-9]{3}"
regex2="FOO[0-9]{2}"
regex="FOO[0-9]"
if [[ $1 =~ ${regex} || $1 =~ ${regex2} || $1 =~ ${regex3} || $1 =~ ${regex4} || $1 =~ ${regex5} ]]

1 个答案:

答案 0 :(得分:7)

您可以使用{min,max}

regex="FOO[0-9]{1,5}"

事实上,您可以使用^$进行完全匹配:

[[ $v =~ ^${regex}$ ]]

测试

$ v=FOO
$ [[ $v =~ ^${regex}$ ]] && echo "yes"
$
$ v=FOO1
$ [[ $v =~ ^${regex}$ ]] && echo "yes"
yes
$ v=FOO123456
$ [[ $v =~ ^${regex}$ ]] && echo "yes"
$