我有一种语言,其中有相同模式的重复实例,我只关心第一个符号。 例如:
system OBJECT IDENTIFIER ::= { mib-2 1 }
interfaces OBJECT IDENTIFIER ::= { mib-2 2 }
at OBJECT IDENTIFIER ::= { mib-2 3 }
ip OBJECT IDENTIFIER ::= { mib-2 4 }
icmp OBJECT IDENTIFIER ::= { mib-2 5 }
tcp OBJECT IDENTIFIER ::= { mib-2 6 }
udp OBJECT IDENTIFIER ::= { mib-2 7 }
egp OBJECT IDENTIFIER ::= { mib-2 8 }
这个简单的例子可以通过这个模式匹配(其中 _ 是空格):
identifier _ "OBJECT IDENTIFIER" _ "::=" _ "{" _ identifier _ number _ "}"
在这种情况下这不是什么大问题(我已经输入了模式 :-) 但是该语言有一组其他大而复杂的结构,它们不保证完整的解析(我只希望每一行的初始标识符做我想到的工作)。
我想输入这样的模式:
identifier _ "OBJECT IDENTIFIER" .*? "}"
“.*?”在哪里? 是非贪婪的 - 它只消耗到第一次出现的终端。 这会在 PEG.js 的列表中吗? 非常感谢。
更新:这可以通过重复计数(这是我最初想法的概括)来满足,如 Google Groups 中的建议: http :
是的,这很完美。 谢谢!
@dmajda去除!"}"
表达式返回的空字符的推荐做法是什么?
例如:
= chars:(!"-suffix" .)+ "-suffix"
"foo-suffix" => [[ '', 'f' ], ['', 'o' ], ['', 'o' ]] // result
"foo-suffix" => ['f', 'o', 'o' ] // desired result
我能够通过将!"-suffix" .
分解为仅返回.
结果的自己的规则来实现这一点,但我很好奇是否有更好的方法。
我认为你可以使用:
= chars:(!"-suffix" c:. {return c})+ "-suffix"
@islandr请不要将问题用作询问有关 PEG.js 使用的问题的地方。 尤其是当他们关门时,尤其是当你问我身边的其他人可以帮助你的事情时。 正确的渠道是Google Group 。
对不起大卫。 以为这是个好地方,因为它是
与您给出的示例直接相关。
在 2013 年 1 月 9 日星期三晚上 9:51,David Majda通知@github.com 写道:
@islandr https://github.com/islandr请不要使用问题作为地方
询问有关 PEG.js 使用的问题。 尤其是当他们关闭和
尤其是当你问一些我身边的人可以做到的事情时
帮你。 正确的渠道是 Google Group http://groups.google.com/group/pegjs
.—
直接回复本邮件或在 Gi tHub上查看
最有用的评论
在PEG形式主义中,您可以通过将谓词与
.
元字符一起使用来轻松匹配直到终止符。 就像是:这对你来说足够了吗?