bash中奇怪的正则表达式行为

时间:2015-09-04 18:29:42

标签: regex bash

我正在尝试找到两个以上个别数字加倍的每个数字。如:

  • 00000000 12
  • 18374的 888 09

我的代码是:

if [[ $number =~ (.)\1{3,10} ]];
then
    echo "$number found"
fi

它正在运作但不如预期: 它回显了包含11的数字,只有它们。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

我建议使用GNU grep:

grep -oE '(.)(\1){2,9}' <<< "1837488809"

输出:

888

答案 1 :(得分:0)

我去了:

check="grep -oE '(.)(\1){2,9}'"
if [ $check -gt 1 ]; then ...

答案 2 :(得分:0)

bash正则表达式不支持反向引用,因此您只需查找在3-10个字符串之前包含至少一个字符的字符串。正确的正则表达式是

# Tedious, yes, but not really any longer than a piece of code to generate it
regex="0{3,10}|1{3,10}|2{3,10}|3{3,10}|4{3,10}|5{3,10}|6{3,10}|7{3,10}|8{3,10}|9{3,10}"
if [[ $number =~ $regex ]];
then
    echo "$number found"
fi