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

标签 regex r

小问题:谁能告诉我为什么

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/

相关文章:

javascript - 用于匹配仅由字母列表构成的单词的正则表达式

python - 如何提取某个单词前的数字?

r - 在 R 中,创建一列用引号括起来并用逗号分隔的标签名称

用于验证电话号码的 Javascript 正则表达式

php - 如何匹配正则表达式中的多个单词

javascript - 将networkD3中 Node 上的clickAction链接到选项卡中的内容预览

r - 从两个向量创建多个系列的向量

r - 将文本行分隔为数据框的列

R,修改包中的函数后,修改被忽略

Java 在点处分割字符串,除非有特定的内容