我还在学习perl6,我正在阅读这个页面上的语法示例:http://examples.perl6.org/categories/parsers/SimpleStrings.html ; 我已多次阅读有关正则表达式的文档,但仍有一些我不理解的语法; 任何人都可以开导我吗?非常感谢你 !!!
token string { <quote> {} <quotebody($<quote>)> $<quote> }
Run Code Online (Sandbox Code Playgroud)
问题1:令牌中的这个"{}"是做什么的?捕获标记为<()>,嵌套结构为tilda'('〜')'; 但是什么是{}?
token quotebody($quote) { ( <escaped($quote)> | <!before $quote> . )* }
Run Code Online (Sandbox Code Playgroud)
问题2a:在<>中转义($ quote)将是一个正则表达式函数,对吗?它需要$ quote作为参数并返回另一个正则表达式?
问题2b:如果我想表示"引用前没有的字符",我应该使用".$!before $ quote>"而不是"<!before $ quote>".??
token escaped($quote) { '\\' ( $quote | '\\' ) } # I think this is a function;
Run Code Online (Sandbox Code Playgroud)
非常感谢你 !!!
lisprog
正如标题所示,$/和之间有什么区别$¢?它们似乎总是具有相同的值:
my $text = "Hello world";
$text ~~ /(\w+) { say $/.raku } (\w+)/;
$text ~~ /(\w+) { say $¢.raku } (\w+)/;
Run Code Online (Sandbox Code Playgroud)
两者都会产生具有相同值的 Match 对象。使用一个而不是另一个的逻辑是什么?
希望对正则表达式的知识有所了解,我决定阅读一本关于它们的书,介绍正则表达式.而且我知道这很愚蠢,但其中一个介绍性的例子对我来说没有意义.
(\d)\d\1
Run Code Online (Sandbox Code Playgroud)
示范文本:
123-456-7890
Run Code Online (Sandbox Code Playgroud)
(应该捕获第一个数字,123)
谁能解释一下这里发生了什么?
据我所知,第一个\d捕获数字123. \1反向引用(标记)该组以供以后使用.括号限制了组的范围.但第二个\d是什么呢?
首选简单解释,如小孩或金毛猎犬.
作为语法的一部分,我有:
rule EX1 { <EX2> ( '/' <EX2>)* }
Run Code Online (Sandbox Code Playgroud)
在我的动作课中,我写了:
method EX1($/) {
my @ex2s = map *.made, $/.<EX2>;
my $ex1 = @ex2s.join('|');
#say "EX1 making $ex1";
$/.make($ex1);
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我只是试图将所有的连接EX2在一起,并'|'在它们之间而不是一个'/'。但是我的代码有些不对劲,因为它只会拾取第一个EX2而不是随后的代码。我如何找出可选的是什么?