如何在数组中找到字符串的位置以%结尾?

时间:2014-08-11 09:20:29

标签: arrays string perl

我的问题是我有一个带有一些刺痛的数组

EX: $line = { devtmpfs  8234932  144   8234788  1%  /dev }

@temp_arr=split(" ",$line);

如何搜索哪个字符串有子字符串'%'我想将该字符串分配给变量

ie,  My var1 = 1% (according to above case)

提前致谢。

6 个答案:

答案 0 :(得分:4)

使用first模块中的List::Util

use List::Util qw(first);

my $line  = q{ devtmpfs  8234932  144   8234788  1%  /dev };
my $found = first { /\%\z/ } split " ", $line;

答案 1 :(得分:1)

我不确定我完全理解你的问题。

这可以胜任吗?

use strict;
use warnings;

my @arr = qw(foo ba%r baz%);

my $count = 0;

foreach(@arr){
    chomp;
    $count++;
    my $element = ($count -1);
    print "Element number $element contains '%': $_\n" if /%$/;
}

这将打印Element number 2 contains '%': baz%,如此示例中唯一以%

结尾的字符串

答案 2 :(得分:0)

使用List::MoreUtils模块。基于this answer

#!/usr/bin/env perl
use strict;
use warnings;
use List::MoreUtils qw(firstidx);

my $line = "devtmpfs  8234932  144   8234788  1%  /dev";
my @temp_arr = split(" ",   $line);
my $i = firstidx { $_ =~ /%$/ } @temp_arr;

printf "String: %s, Index: %i\n", $temp_arr[$i], $i;

__END__

输出:

String: 1%, Index: 4

答案 3 :(得分:0)

你的语法错了。

$line = { devtmpfs 8234932 144 8234788 1% /dev }

应该是

$line = q{ devtmpfs 8234932 144 8234788 1% /dev };

无论如何解决方案是

#!/usr/bin/perl
use strict;
use warnings;
my $line = q|devtmpfs  8234932  144   8234788  1%  /dev|;
my @temp_arr = split(" ",$line);
my $var;
foreach (@temp_arr){
    if($_ =~ /%$/){
        $var = $_;
    }
}
print "Result: $var";

<强> Demo

答案 4 :(得分:0)

或者,使用正则表达式提取百分比:

my ($percent) = $line =~ /(\d+%)/;

答案 5 :(得分:0)

您可以使用grep

my $line  = ' devtmpfs  8234932  144   8234788  1%  /dev ';
my ($found) = grep /\%$/, split ' ', $line;

如果要指定默认值,请使用正则表达式;如果未找到该值,则使用正则表达式警告:

my $found = $line =~ /(\S*\%)(?!\S)/ ? $1 : warn "Value not found";