小问题:谁能告诉我为什么
grepl('p(?!q)', 'pq', perl = TRUE)
是FALSE
但是
grepl('p(?!p)', 'pp', perl = TRUE)
是TRUE
吗?
不应该应用完全相同的逻辑吗?我如何使用否定前瞻来匹配包含“p”但后面没有跟另一个“p”的字符串?
最佳答案
grepl('p(?!q)', 'pq', perl = TRUE)
这里有一个p
,所以它只检查那个p
。检查单个 p 后面是否没有 q
。但它失败了,因为 p
后跟 q
。由于未找到匹配项,因此返回 FALSE
grepl('p(?!p)', 'pp', perl = TRUE)
这里它检查第一个 p
。它失败了,因为第一个 p
后面跟着另一个 p
。但是当它检查第二个 p
时,条件变为真,因为第二个 p
后面没有跟 p
。因为它至少找到一个匹配项,所以返回 TRUE
。
关于regex - 在 R 中使用负前瞻的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688866/