不超过一个连续字符出现的正则表达式

时间:2020-04-08 21:22:19

标签: regex grep

我正在寻找仅在字符串中连续出现2个连续字符时才匹配的正则表达式。

例如:

  • 1123456-匹配
  • 1122345-不匹配
  • 1121125-不匹配
  • 1234567-不匹配
  • 1112345-不匹配

当前具有此正则表达式:([0-9])\ 1 {1,},但它也匹配1122345,这不是我所需要的

1 个答案:

答案 0 :(得分:1)

如果您的awk(mawk)或GNU awk(gawk)最少,则可以使用此awk:

awk -F "" '
{
    d=0
    for(i=1;i<NF;i++){
        if ($i==$(i+1)) d++
    }
    if (d==1) print
}' file

将字段设置为空字符串(""),您可以按字符阅读每行!如果字符i等于字符i+1,则递增d。如果为d==1,则显示字符串。

根据您的样本:

$ cat file
1123456
1122345
1121125
1234567
1112345

它输出:

1123456

重要说明:

GNU awk手册说,使用空字符串作为字段分隔符是一个“黑暗的角落”,这意味着它不是标准的,某些实现可能以不同的方式处理它。如果您想确定它可以与任何awk一起使用,请

awk '
{
    d=0
    n=split($0,ch,"")
    for(i=1;i<n;i++){
        if (ch[i]==ch[i+1]) d++
    }
    if (d==1) print
}' file

它通过了gawk --posix测试,并得出了相同的结果。