首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配被相同模式(LPEG)包围的PEG模式

匹配被相同模式(LPEG)包围的PEG模式
EN

Stack Overflow用户
提问于 2022-08-13 21:30:59
回答 1查看 53关注 0票数 1

我试图将这个regex模式转换为lpeg:{ *(?<!-)[, ](?!-) *} --它将作为拆分模式使用,将2.5 2.6/2.5, 2.6转换为2.52.6,除非涉及到-。这是标识语义约束的一部分。

我使用了从lpeg 文档复制的拆分函数

代码语言:javascript
复制
local function split (str, sep)
   sep = l.P(sep)
   local elem = l.C((1 - sep)^0)
   local p = l.Ct(elem * (sep * elem)^0)   -- make a table capture
   return p:match(str)
 end

我的第一次尝试是在有逗号的情况下:

代码语言:javascript
复制
local h, sp = l.P'-', l.P' '
patt = sp^0 * (-h * l.S' ,' - h) * sp^0
split('2.5, 2.6', patt) -- works
split('2.5 2.6', patt) -- fails because the first sp^0 eats everything

然而,当只有空格时,它当然会失败。我不知道如何维护原始regex模式的约束,并使其在这两种情况下都能工作。我的其他努力以无限循环结束。是否有一种方法来捕获模式的一个实例,它被贪婪的自身版本所包围,或者lpeg的一些聪明的方面可以解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-09-01 02:15:38

LPeg中默认的匹配方法是盲贪婪匹配,为了模拟给定正则表达式的行为,我们需要构造一个非盲贪婪匹配文法,

S <- E1 S/ E2

它将匹配多个E1和E2。

代码语言:javascript
复制
local patt = l.P{
  's',
  s  = ' ' * l.V's' + l.V'suffix',
  suffix = -l.B'-' * l.S', ' * -l.P'-'  * l.P' '^0
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73347751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档