gpt4 book ai didi

r - 正则表达式意外匹配

转载 作者:行者123 更新时间:2023-12-04 01:06:48 24 4
gpt4 key购买 nike

我期待正则表达式模式 ab{,2}c仅与 a 匹配后跟 0、1 或 2 b s,后跟 c .

它在许多语言中都是这样工作的,例如 Python。但是,在 R 中:

grepl("ab{,2}c", c("ac", "abc", "abbc", "abbbc", "abbbbc"))
# [1] TRUE TRUE TRUE TRUE FALSE

我对第四个感到惊讶 TRUE .在 ?regex , 我会读:

{n,m} The preceding item is matched at least n times, but not more than m times.



所以我同意 {,2}应该写 {0,2}是一个有效的模式(与 Python 中不同,在 Python 中,文档明确指出省略 n 指定下限为零)。

但随后使用 {,2}应该抛出错误而不是返回误导性的匹配!我是否遗漏了什么,还是应该将其报告为错误?

最佳答案

{,2}的行为不是预期的,这是一个错误 .如果您查看 TRE 源代码, tre_parse_bound method ,您会看到 min变量值设置为 -1在引擎尝试初始化最小边界之前。如果量词中缺少最小值,“重复”的数量似乎是最大值的数量 + 1 (好像重复数等于 max - min = max - (-1) = max+1 )。

所以,a{,}匹配一次 a .同 a{, }a{ , } .见 R demo , 仅 abcab{,}c 匹配:

grepl("ab{,}c", c("ac", "abc", "abbc", "abbbc", "abbbbc"))
grepl("ab{, }c", c("ac", "abc", "abbc", "abbbc", "abbbbc"))
grepl("ab{ , }c", c("ac", "abc", "abbc", "abbbc", "abbbbc"))
## => [1] FALSE TRUE FALSE FALSE FALSE

关于r - 正则表达式意外匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com