害虫中的 PEG 解析器匹配三引号内的正则表达式,在 https://pest.rs/ 尝试
PEG parser in pest to match regex within triple quotes, tried at https://pest.rs/
我正在编写一个 PEG 文件,用于 pest 我们的 dsl。我需要解析一个键值,其中值是三重引号内的正则表达式。我无法为其编写害虫规则。
值为"""Some regex here"""
我定义的规则是:
TQ = {"\"\"\""}
我需要
regex = {TQ ~ Anything but not TQ ~ TQ}
我试过
regex = {TQ ~(!TQ)* ~ TQ}
这不起作用而且 PEG 不正确
regex = {TQ ~ ANY* ~ TQ}
它贪婪地消耗了所有令牌,甚至最后的三重引号
该规则应该解析三引号内的正则表达式,例如
"""^\w+\s+\d\d\d\d\-\d\d\-\d\d\s+\d\d\:\d\d\:\d\d\s+AB_02V\s+\d+\s+.*"""
您的定义非常接近正确,但需要注意一点:Pest 否定谓词在成功时不消耗任何输入。所以如果你只是告诉它不要匹配某些东西,解析器可能会卡住并且无法取得进展。
它还需要知道要匹配什么。在这种情况下,那将是任何事情。 Pest 有一个内置规则 ANY
正是为了这个目的:
tq = { "\"\"\"" }
re = { (!tq ~ ANY)* }
regex = { tq ~ re ~ tq }
如果您想更深入地了解,pest book。
我正在编写一个 PEG 文件,用于 pest 我们的 dsl。我需要解析一个键值,其中值是三重引号内的正则表达式。我无法为其编写害虫规则。
值为"""Some regex here"""
我定义的规则是:
TQ = {"\"\"\""}
我需要
regex = {TQ ~ Anything but not TQ ~ TQ}
我试过
regex = {TQ ~(!TQ)* ~ TQ}
这不起作用而且 PEG 不正确
regex = {TQ ~ ANY* ~ TQ}
它贪婪地消耗了所有令牌,甚至最后的三重引号
该规则应该解析三引号内的正则表达式,例如
"""^\w+\s+\d\d\d\d\-\d\d\-\d\d\s+\d\d\:\d\d\:\d\d\s+AB_02V\s+\d+\s+.*"""
您的定义非常接近正确,但需要注意一点:Pest 否定谓词在成功时不消耗任何输入。所以如果你只是告诉它不要匹配某些东西,解析器可能会卡住并且无法取得进展。
它还需要知道要匹配什么。在这种情况下,那将是任何事情。 Pest 有一个内置规则 ANY
正是为了这个目的:
tq = { "\"\"\"" }
re = { (!tq ~ ANY)* }
regex = { tq ~ re ~ tq }
如果您想更深入地了解,pest book。