Perl:这是正确的还是坏的正则表达式,以及如何改进它?

我正在尝试捕获传感器的温度输出,为此我有以下相关线:
temp1:       +39.5 C  (crit = +105.0 C)
Core 0:      +40.0 C  (high = +100.0 C,crit = +100.0 C)
Core 1:      +40.0 C  (high = +100.0 C,crit = +100.0 C)

我只需要每行的第一个温度(39.5,40.0,40.0).问题当然是因为在“Core 0”/“Core 1”中有一个额外的空间,所以我不能真正使用单词编号.

我已经提出了以下正则表达式,它确实有效,但是我被告知使用.*对正则表达式来说是一种有点懒惰和肮脏的方法.

$core_data =~ s/^.*\+(.*)C\ .*$/$1/g;

我想知道,有没有更严格或更好的方法来实现这一目标,还是我做得好?

解决方法

一个更简洁的正则表达式
/\+(\d+\.?\d*) C/

这将匹配第一个温度和可选的十进制值.

#!/usr/bin/perl
use strict;
use warnings;

my $re = qr{\+(\d+\.?\d*) C};
while (my $line = <DATA>){
    $line =~$re and print $1,"\n";
}
__DATA__
temp1:       +39.5 C  (crit = +105.0 C)
Core 0:      +40.0 C  (high = +100.0 C,crit = +100.0 C)

输出

39.5
40.0
40.0

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...