Perl 正则表达式匹配数
Perl6 Regex Match Num
我想匹配部分文本字符串中的任何 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*) ( .* )//;
这似乎是很多(容易出错的)轮子的重新发明。是否有 perl6 技巧来匹配语法中的内置类型(Num、Real 等)?
如果你能对数字做出合理的假设,比如它是由单词边界分隔的,你可以这样做:
regex number {
« # left word boundary
\S+ # actual "number"
» # right word boundary
<?{ defined +"$/" }>
}
此正则表达式的最后一行将 Match ("$/"
), and then tries to convert it to a number (+
). If it works, it returns a defined value, otherwise a Failure
字符串化。此 string-to-number 转换可识别与 Perl 6 语法相同的句法。 <?{ ... }>
构造是一个断言,因此如果内部表达式 returns 为假值,它会使匹配失败。
我想匹配部分文本字符串中的任何 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*) ( .* )//;
这似乎是很多(容易出错的)轮子的重新发明。是否有 perl6 技巧来匹配语法中的内置类型(Num、Real 等)?
如果你能对数字做出合理的假设,比如它是由单词边界分隔的,你可以这样做:
regex number {
« # left word boundary
\S+ # actual "number"
» # right word boundary
<?{ defined +"$/" }>
}
此正则表达式的最后一行将 Match ("$/"
), and then tries to convert it to a number (+
). If it works, it returns a defined value, otherwise a Failure
字符串化。此 string-to-number 转换可识别与 Perl 6 语法相同的句法。 <?{ ... }>
构造是一个断言,因此如果内部表达式 returns 为假值,它会使匹配失败。