我想从文本字符串的一部分匹配任何Num.到目前为止,这个(从https://docs.perl6.org/language/regexes.html#Best_practices_and_gotchas中窃取)完成了这项工作......
my token sign { <[+-]> }
my token decimal { \d+ }
my token exponent { 'e' <sign>? <decimal> }
my regex float {
<sign>?
<decimal>?
'.'
<decimal>
<exponent>?
}
my regex int {
<sign>?
<decimal>
}
my regex num {
<float>?
<int>?
}
$str ~~ s/( <num>? \s*) ( .* )/$1/;
Run Code Online (Sandbox Code Playgroud)
这似乎很多(容易出错)重新发明轮子.是否有perl6技巧可以在语法中匹配内置类型(Num,Real等)?
如果您可以对数字做出合理的假设(例如,它由单词边界分隔),则可以执行以下操作:
regex number {
« # left word boundary
\S+ # actual "number"
» # right word boundary
<?{ defined +"$/" }>
}
Run Code Online (Sandbox Code Playgroud)
此正则表达式的最后一行将Match("$/")字符串化,然后尝试将其转换为数字(+)。如果有效,则返回定义的值,否则返回Failure。此字符串到数字的转换识别与Perl 6语法相同的语法。该<?{ ... }>构造是一个断言,因此,如果内部表达式返回错误值,则使匹配失败。