前2位相同,但第3位和第一位不同,第4位也和第一位不同?
调试正则推荐一个网站
从这里可以看到,你后面的"\1"已经不代表第一个分组了,所以错了
至于正确的正则表达式应该是怎样的,你先说下老师的原题是什么吧
我上面的回答已经告诉你错在哪里了,那个中括号里的"\1"已经不是代表第一个分组了,而是代表的字符"1",所以你“1111”没选出来的原因其实是因为你写的这个就是后两位不为"1",如果它来一个"2222"照样会被你这个表达式找出来。至于正确答案,楼下的已经说了,要用"?!".
另外,如果你老师的原话是说找出"1122"和"aabb",那你直接找这两个字符串不就好了?她又没说是找形如"aabb"结构的字符串,也没说是否可以字母数字混用,比如"aa11"
如果后面两个字符要一样的话,楼下的答案也会有问题,你用我下面贴的这个应该就没问题了,注意我这里修改了正则匹配模式
cat test_regexp.txt | grep -Pwe '^([0-9])\1(?!\1\1)([0-9])\2$'
下面这个题里写了关于linux的负向先行断言( negative lookahead assertion)
There is no negative lookahead assertion in POSIX extended regular expressions, which is the syntax grep -E activates.
用Negative Lookahead^([0-9])\1(?!\1\1)[0-9]{2}$
^([a-z])\1(?!\1\1)[a-z]{2}$