正则表达式的意外匹配

2023-12-29

我期望正则表达式模式ab{,2}c仅匹配a后跟 0、1 或 2bs,随后是c.

许多语言都以这种方式工作,例如 Python。然而,在 R 中:

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

4号令我惊讶TRUE. In ?regex, 我会读:

{n,m}前一项至少匹配n次,但不能更多 比m times.

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

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


行为与{,2}不是预期的,这是一个错误。如果你看一下 TRE 源代码,tre_parse_bound method https://github.com/laurikari/tre/blob/556ef09df29aadc041923522d07cc012d92a4749/lib/tre-parse.c#L597,你会看到min变量值设置为-1在引擎尝试初始化最小边界之前。量词中缺少最小值时的“重复”次数似乎是最大值的次数 +1(就好像重复次数等于max - min = max - (-1) = max+1).

So, a{,}匹配 1 次出现a。与...一样a{, } or a{ , }. See R demo https://ideone.com/RvD7ip, only 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式的意外匹配 的相关文章

随机推荐

  • 从会话中存储/检索动态对象后检索属性

    在我的 MVC 应用程序中 在控制器中 我创建了一个动态类型列表 该列表存储在会话中 然后视图尝试访问对象 但抛出异常 object does not contain a definition for a 代码 Controller Lis
  • 如何隐藏键盘 - UITextView iPhone - 通过返回键[重复]

    这个问题在这里已经有答案了 在 UITextView 中 当我们点击它时 出现键盘 但是当用户按下返回键时 通常在textView中创建一个新行 键盘应该向下 How 好的 我在 jordan 链接帮助的帮助下找到了正确的答案 在您的视图控
  • 将 OpenGL 窗口添加到 GTK 构建器中

    我正在使用 GTK 和 OpenGL 编写 C 应用程序 我有一个 GTK 构建器 它读取 XML 文件并自行构建 我需要在其中添加一个 OpenGL 窗口区域 我该怎么做呢 我这样做的方式 gtkmm C 代码 是这样的 include
  • 为什么 NodeJS 不使用 Promise 来实现 readFile API?

    在书里https pragprog com book tbajs async javascript https pragprog com book tbajs async javascript 我找到了这个 Node 的早期迭代在其非阻塞
  • Visual Studio 2010 调试器不再因错误而停止

    我今天正在开发一个 Windows 应用程序 当时我的错误不再像平常那样显示 相反 调试器只是跳出该方法 输出窗口会记录异常 但不会出现通常的弹出跟踪 它适用于其他项目 我已经把Dim i as Integer A 作为我尝试引发错误的第一
  • Android - 获取用户列表和个人资料名称

    我们可以在Android设备上创建多个用户和配置文件 例如 有一个主要用户 我还设置了一个名为 工作配置文件 的工作配置文件 使用以下 adb 命令 adb shell pm list users 我得到这个结果 用户信息 0 我的用户 1
  • 在 android 3.x 中使用 android-browser 打开本地 html-file

    对于 android 2 x 我可以使用该解决方案 browserIntent setClassName com android browser com android browser BrowserActivity 帖子中已解决 使用An
  • 将 Informix 游标转换为 MSSQL 游标

    我在 Informix 数据库中有一个游标 它是函数的一部分 我想将其转换为 MS SQL 中的游标 下面是代码 DECLARE select distinct agentname agentloginid from selected ag
  • 在 Javascript 中按大写字母分割

    我正在尝试使用 Javascript 按大写字母拆分字符串 我正在尝试做的事情的例子 HiMyNameIsBob gt Hi My Name Is Bob GreetingsFriends gt Greetings Friends 我知道s
  • 子视图控制器如何使用Parentviewcontroller中定义的方法

    我遇到的情况是 子视图控制器尝试显示多个视图控制器 并且在执行该操作时 子视图控制器需要从父视图控制器访问播放暂停操作方法 如何实现这一点 子视图控制器可以使用在父视图控制器中定义的播放暂停操作方法 该方法用于暂停音频播放器 暂停计时器和暂
  • 访问另一个项目的设置文件

    有没有办法从不同的项目访问设置文件 例如 我有一个包含 2 个项目的解决方案 我们称它们为 Proj1 和 Proj2 我想从 Proj1 中的 Program cs 访问 Proj2 的应用程序设置 这可能吗 如果您使用 C 答案是 非常
  • 无法加载资源:服务器响应状态为 503(服务不可用) favicon.ico

    我正在尝试通过 Heroku 部署我的 Node JS 站点 但不断收到此错误 无法加载资源 服务器响应状态为 503 服务不可用 favicon ico 我四处搜索并认为我应该添加以下内容到我的标题 但是我仍然收到此错误 有任何想法吗 这
  • Django-allauth:注册时发送欢迎电子邮件(无需验证)

    如何向注册 django 应用程序 使用 django allauth 的用户发送欢迎电子邮件 如果我设置ACCOUNT EMAIL VERIFICATION mandatory 它工作正常 用户会收到一封验证电子邮件 但由于我不需要任何电
  • 制作动画时,如何仅在所有元素完成时才触发回调?

    在 jQuery 中制作动画时 仅当所有元素完成动画而不是每个元素时才触发回调的最佳实践是什么 例如 someElements fadeOut fast function dont do this until ALL elements ar
  • 为什么 std::is_rvalue_reference 不做它所宣传的事情?

    例如 如果我有 include
  • Laravel 数组验证

    我有这样的要求 GET http example com test q 1 q 2 q 3 我有这条路线 Route get test function Request req req gt validate q gt array 我应该如
  • SQL查询不显示第一个结果?

    我正在尝试在我的 php 页面中动态创建导航菜单 我有一个查询来创建活动页面列表 但由于某种原因 第一个结果从未显示 menu mysql query SELECT link FROM myTable WHERE active page y
  • webpack模块解析失败意外字符'@'

    我正在使用 vue cli 在 main js 中导入 css 文件后 import Vue from vue import App from App vue import element ui lib theme default inde
  • iOS 推送通知类型选项?警报与横幅?

    我读过这里的帖子 建议让推送通知显示为警报而不是横幅的唯一方法是单个最终用户更改Alert Style in the Notifications应用程序的部分Settings 让我困惑的是 有些应用程序默认为Alerts风格 而不必这样做
  • 正则表达式的意外匹配

    我期望正则表达式模式ab 2 c仅匹配a后跟 0 1 或 2bs 随后是c 许多语言都以这种方式工作 例如 Python 然而 在 R 中 grepl ab 2 c c ac abc abbc abbbc abbbbc 1 TRUE TRU