You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LPeg中如何同时实现外层捕获与内部命名捕获?

解决LPeg同时捕获完整子串与命名字母的问题

你的问题出在外层的C捕获会将内部所有嵌套捕获合并为单一字符串,导致Cg的命名捕获无法被Ct收集——因为Ct只会处理顶级的捕获项,嵌套在C里的命名捕获会被覆盖。

要同时获取完整子串和单独字母的命名捕获,只需用Cg嵌套实现:外层Cg捕获整个匹配内容并命名,内层Cg单独捕获字母,这样Ct会将两个命名项都存入结果表。

示例代码

local lpeg = require 'lpeg'

-- 同时捕获完整子串(命名为full)和单独字母(命名为letter)
local pat = lpeg.Ct(
    lpeg.Cg(
        (lpeg.P" ")^0 * lpeg.Cg(lpeg.C(lpeg.R"az"), "letter") * lpeg.P".",
        "full"
    )
)

local result = lpeg.match(pat, "    a.")
-- 输出结果:{ full = "    a.", letter = "a" }

原理说明

  • 外层lpeg.Cg(..., "full"):把整个匹配的内容(前置空格+字母+点)作为命名捕获full。
  • 内层lpeg.Cg(lpeg.C(lpeg.R"az"), "letter"):在匹配过程中单独捕获字母,命名为letter。
  • Ct会将这两个命名捕获全部收集到结果表中,直接通过键名即可访问对应值,无需额外反向提取操作。

内容的提问来源于stack exchange,提问作者MrMobster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:01:18