具有两个或多个相同连续字符的匹配字符串上的正面和负面前瞻

时间:2017-11-04 14:21:58

标签: regex grep

编辑:这个问题不同,因为我没有寻找匹配字符串和连续字符的解决方案;相反,我试图理解为什么一些正则表达式会起作用或不起作用。

我试图理解正则表达式中的前瞻概念。

比方说,我有一个名为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

这是我的预期。

  1. 如果我使用负前瞻,即grep -P '(?!(\w)\1)' testfile,而不是获得没有两个或更多相同连续字符的行,则返回所有行。我的理由是,为了返回一行,需要有一个字符,下一个字符不一样。但是也会返回ffffffffffffff。我想这可能是因为最后f\b继承。
  2. 如果我尝试grep -P '(\w)(?!\1)' testfile,则返回所有行,但只匹配自己没有成功的字符,这意味着我之前的推理可能是正确的。最重要的是,如果我输入grep -P '.*(?!(\w)\1)' testfile,则会返回所有符号都匹配的行。
  3. 如果我现在输入grep -P '(?!.*(\w)\1)' testfile,则会发生同样的情况。只有在最终使用grep -P '^(?!.*(\w)\1)' testfile时,才能获得我想要的结果。
  4. 关于我的第3点,有谁可以告诉我为什么第一个正则表达式不起作用,但第二个(我使用锚点)的确有效?

0 个答案:

没有答案