首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pest中的PEG解析器,在三个引号内匹配正则表达式,在https://pest.rs/上尝试过

pest中的PEG解析器,在三个引号内匹配正则表达式,在https://pest.rs/上尝试过
EN

Stack Overflow用户
提问于 2019-10-09 14:28:13
回答 1查看 187关注 0票数 1

我正在写一个聚乙二醇文件是用在我们的数字用户线的pest。有必要在我需要解析一个键值,其中值是三重引号内的正则表达式。我不能为它写一个有害程序规则。

该值为"""Some regex here"""

我定义的规则是:

代码语言:javascript
运行
复制
TQ = {"\"\"\""}

我需要

代码语言:javascript
运行
复制
regex = {TQ ~ Anything but not TQ ~ TQ}

我试着用

代码语言:javascript
运行
复制
regex = {TQ ~(!TQ)* ~ TQ}

这是不起作用的,不是正确的PEG

代码语言:javascript
运行
复制
regex = {TQ ~ ANY* ~ TQ}

它贪婪地消耗所有标记,甚至最后的三重引号

该规则应在三个引号内解析正则表达式,如下所示

代码语言:javascript
运行
复制
 """^\w+\s+\d\d\d\d\-\d\d\-\d\d\s+\d\d\:\d\d\:\d\d\s+AB_02V\s+\d+\s+.*"""
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-09 15:11:57

您的定义非常接近于正确,但有一点需要注意: Pest否定谓词在成功时不会消耗任何输入。因此,如果您只告诉解析器不匹配某些内容,解析器可能会停滞不前,无法取得进展。

它还需要知道要匹配的内容。在这种情况下,这将是任何东西。有害程序有一个内置规则ANY来实现这个目的:

代码语言:javascript
运行
复制
tq = { "\"\"\"" }

re = { (!tq ~ ANY)* }

regex = { tq ~ re ~ tq }

如果你想深入研究,这里有pest book

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58298200

复制
相关文章

相似问题

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