在R中使用负前瞻的意外行为

Aar*_*ron 2 regex r

快速提问:任何人都可以告诉我原因

grepl('p(?!q)', 'pq', perl = TRUE)
Run Code Online (Sandbox Code Playgroud)

FALSE

grepl('p(?!p)', 'pp', perl = TRUE)
Run Code Online (Sandbox Code Playgroud)

TRUE吗?

不应该使用完全相同的逻辑吗?如何使用负前瞻来匹配包含"p"的字符串,后面跟着另一个"p"?

Avi*_*Raj 5

grepl('p(?!q)', 'pq', perl = TRUE)
Run Code Online (Sandbox Code Playgroud)

这里有一个p,所以它只检查单个p.检查单个p后面没有q.但它失败了,p接下来是q.由于找不到匹配项,因此返回FALSE

grepl('p(?!p)', 'pp', perl = TRUE)
Run Code Online (Sandbox Code Playgroud)

在这里检查第一个p.它失败了,因为第一个p是另一个p.但是当它检查第二个时p,条件变为真,因为第二个p没有跟随p.因为它找到至少一个匹配,所以返回TRUE.