【问题标题】:Non-capturing group still selecting meta escape非捕获组仍在选择元逃生
【发布时间】:2021-09-24 22:13:56
【问题描述】:

我正在使用 pcre 正则表达式,并希望在 \begin{pmatrix} ... } 之后选择最终的 } 以将其替换为 \end{pmatrix}。

上下文是我正在为 LaTeX 制作一个从 \bmx{...} 到 \begin{pmatrix}...\end{pmatrix} 的自动转换器,这是我程序的最后一步。

我试过了

(?<=\\begin{pmatrix})(?:(.*?)(?=}))(.)

它利用积极的后视和非捕获组来帮助我在矩阵的肉之后(...之前)找到}。

为什么非捕获组仍在捕获?它阻止我完成我的项目。

这里是正则表达式的链接:https://regex101.com/r/FIUBMt/1

【问题讨论】:

  • 您似乎对非捕获组(以及为此捕获组)的目的有一些误解。尝试将(\\begin{pmatrix}[^}]*)} 替换为\1\\end{pmatrix}。见this demo。
  • 详细说明,非捕获组匹配的内容不从最终匹配中排除。之所以称为“非捕获”,是因为它不会将某些内容捕获到可以单独访问的编号/命名组中。另一方面,捕获组确实做到了。
  • 你的正则表达式等于(?&lt;=\\begin{pmatrix})(.*?)(})

标签: regex pcre


【解决方案1】:

根据您当前的正则表达式逻辑,修复将是

\\begin{pmatrix}[^}]*\K}

查看正则表达式演示。

详情:

  • \\begin{pmatrix} - \\begin{pmatrix} 字符串
  • [^}]* - 除} 之外的零个或多个字符
  • \K - 匹配重置运算符,从匹配值中丢弃当前匹配的文本
  • } - 唯一匹配和消费的}。

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2015-06-07
    • 2014-01-11
    相关资源
    最近更新 更多