我在此~
中找到了波浪号Config::INI Perl 6 Grammar:
token header { ^^ \h* '[' ~ ']' $<text>=<-[ \] \n ]>+ \h* <.eol>+ }
我正在处理的文本中没有波浪号~
。我知道'[' ~ ']'
很重要,因为省略'['
,~
和']'
中的任何一个或全部会使语法不再与我的文字匹配。
因为我知道我要匹配的模式,所以我对其进行了更改,以便方括号放在文本表达式的周围,因此:
token header { ^^ \h* '[' $<text>=<-[ \] \n ]>+ ']' \h* <.eol>+ }
因此,在我看来'[' ~ ']'
的确在这里说要匹配一个方括号,然后再期待右方括号。
[无论如何,我知道在正常的Perl 6语法中,波浪号~
用于连接字符串。但这显然意味着this Grammar内部有些不同。 (在Perl 6中,可以使用文法从文本中提取复杂的数据结构。它们就像带到下一级的正则表达式一样。)
无论如何,我在documentation中搜索了Grammars,并在Regular Expressions中搜索了一个~
,但是我在语法或正则表达式中都找不到。
您可以在设计文档中找到说明:https://github.com/perl6/roast/blob/master/S05-metachars/tilde.t#L6-L81
它主要完成您所发现的事情:将代字号替换为右括号后的表达式,并在括号字符之间进行搜索。但是,它增加了一些额外的魔力,以帮助表达式识别终止括号,并在找不到最终括号时提供更有用的错误消息。因此,您将通常通过两种方式(但并非总是如此)获得相同的结果。