[英]Perl regular expression for matching a numeric literal
我正在寻找Perl中与以下所有内容匹配的正则表达式:
12345
12345.67
.23E-10 # A very small number
3.14_15_92 # A very important number
4_294_967_296 # Underscore for legibility
0xff # Hex
0xdead_beef # More hex
0377 # Octal (only numbers, begins with 0)
0b011011 # Binary
我目前的正则表达式是([\\d\\.a-z_A-Z-]*)
,但我匹配的东西太多......
更新
我有一个正则表达式,但我想把它们混合在一起。
(\\d*)
(\\d*(?:(?=\\d*)\\.\\d*))
(\\d*(?:(?=\\d*)\\.\\d*)(?:E?(?=[-|\\d]*)-?\\d*))
(\\d*\\.?(?:\\d{0,3}_?)*)
(0x([a-zA-Z]*_?)*)
((?:\\d*[a-zA-Z]*)*)
看一下Regexp::Common
,特别是Regexp::Common::number
。 它将为大多数人提供解决方案。
use Regexp::Common qw /number/;
while (<>) {
/^$RE{num}{int}$/ and print "Integer\n";
/^$RE{num}{real}$/ and print "Real\n";
/^$RE{num}{real}{-base => 16}$/ and print "Hexadecimal real\n";
}
我终于得到了以下正则表达式:
\b((?:0x[a-zA-Z_]+)|(?:0[a-zA-Z\d]+)|(?:\d*\.?\d*E\-?\d*)|(?:\d*\.(?:\d{0,3}_?)*)|(?:\d+)|(?:\d*\.\d+))\b
我敢肯定它并不完美,但它能完成这项工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.