编辑:这个问题不同,因为我没有寻找匹配字符串和连续字符的解决方案;相反,我试图理解为什么一些正则表达式会起作用或不起作用。
比方说,我有一个名为testfile
的文件。
asdasdaf
ef
efef
asdasdae
asdasdasdasdas
file_record_transcript.pdf
file_07241999.pdf
testfile_fake.pdf.tmp
The fat cat sat on the mat.
abba
awwa
asddadawwww
ffffffffffffff
我可以使用grep -P '(?=(\w)\1)' testfile
找到包含两个或多个相同连续字符的行。这将返回
file_07241999.pdf
abba
awwa
asddadawwww
ffffffffffffff
这是我的预期。
grep -P '(?!(\w)\1)' testfile
,而不是获得没有两个或更多相同连续字符的行,则返回所有行。我的理由是,为了返回一行,需要有一个字符,下一个字符不一样。但是也会返回ffffffffffffff
。我想这可能是因为最后f
由\b
继承。grep -P '(\w)(?!\1)' testfile
,则返回所有行,但只匹配自己没有成功的字符,这意味着我之前的推理可能是正确的。最重要的是,如果我输入grep -P '.*(?!(\w)\1)' testfile
,则会返回所有符号都匹配的行。grep -P '(?!.*(\w)\1)' testfile
,则会发生同样的情况。只有在最终使用grep -P '^(?!.*(\w)\1)' testfile
时,才能获得我想要的结果。关于我的第3点,有谁可以告诉我为什么第一个正则表达式不起作用,但第二个(我使用锚点)的确有效?