【发布时间】: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。 -
详细说明,非捕获组匹配的内容不从最终匹配中排除。之所以称为“非捕获”,是因为它不会将某些内容捕获到可以单独访问的编号/命名组中。另一方面,捕获组确实做到了。
-
你的正则表达式等于
(?<=\\begin{pmatrix})(.*?)(})