繁体   English   中英

用于匹配数字文字的Perl正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM