我使用perl6正则表达式匹配长度最小的重复任意字符序列。
阅读完https://docs.perl6.org/language/regexes#Capture_numbers并调整给出的示例后,我使用“外部变量”提出了以下代码:
#uses an additional variable $c
perl6 -e '$_="bbaaaaawer"; /((.){} :my $c=$0; ($c)**2..*)/ && print $0';
#Output: aaaaa
Run Code Online (Sandbox Code Playgroud)
为了帮助说明我的问题,在perl5中使用了类似的正则表达式:
#No additional variable needed
perl -e ' $_="bbaaaaawer"; /((.)\2{2,})/ && print $1';
Run Code Online (Sandbox Code Playgroud)
有人可以启发我“储蓄” $0到$c空缺的需求/好处{}吗?是否有匹配的替代(更好/类似)的perl6正则表达式?
提前致谢。
我想拥有一个语法,它是否存在空格...我想匹配:
this ' <foo> <bar> <baz> '
and also this '<foo><bar><baz>'
Run Code Online (Sandbox Code Playgroud)
这有效:
token TOP { \s* <foo> \s* <bar> \s* <baz> \s* }
Run Code Online (Sandbox Code Playgroud)
但是,在阅读了有关:sigspace, <。ws >和规则的所有信息之后,我可以想象有一种方法可以避免重复的* \ s。(即,如何在per6语法中匹配十六进制数组)
请问有人可以告诉我在perl6语法中是否还有更好的方法?
注意 这不能通过简单地将令牌声明符更改为rule来解决 -当我尝试这种方法时,解析字符串中要么匹配空格,要么不匹配空格(但不能同时匹配两个)。
当Perl 6语法规则中的空白区域显着时,有人可以澄清吗?我正在通过反复试验来学习一些,但似乎无法在文档中找到实际的规则.
例1:
rule number {
<pm> \d '.'? \d*[ <pm> \d* ]?
}
rule pm {
[ '+' || '-' ]?
}
Run Code Online (Sandbox Code Playgroud)
将匹配一个数字2.68156e+154,而不关心存在的空格rule number.但是,如果我之后添加一个空格\d*,它将失败.(即<pm> \d '.'? \d* [ <pm> \d* ]?失败).
示例2:如果我试图在单词的中间找到文字,那么它们之间的间距很重要.即,在找到条目Double_t Delta_phi_R_1_9_pTproj_13_dat_cent_fx3001[52] = {
grammar TOP {
^ .*? <word-to-find> .* ?
}
rule word-to-find {
\w*?fx\w*
}
Run Code Online (Sandbox Code Playgroud)
会找到这个词.然而,如果规则的定义word-to-find更改为:
fx
或 \w* fx\w*
或 \w*fx \w*那么就不会进行匹配.
此外,然后定义'[52]'将匹配,而定义'fx[52]'将不匹配.
感谢您的任何见解.指向文档中正确点的指针将有很大帮助!谢谢,