在perl中匹配字符串和整数

时间:2011-07-08 06:19:26

标签: perl matching

我有一串数字,比如“4 2 6 7”,还有一个变量i,它是一个整数。如何判断字符串中是否包含i?代码在perl ...

6 个答案:

答案 0 :(得分:4)

使用此功能:

my $string = "4 2 6 7";
my $i = 4;
if ( $string =~ /\b$i\b/ ) {
    print "$string contains $i\n";
}

答案 1 :(得分:3)

您可以使用split从字符串“4 2 6 7”创建数组,然后使用grep搜索数组。

$ perl -wle 'if ( grep {$_ eq $i} split(" ", "4 2 6 7") ) {print "matched\n";}'

编辑: 或者您可以使用'=='而不是'eq'作为比较运算符来匹配数字而不是字符串。

答案 2 :(得分:2)

为了好玩,~~智能匹配运算符:

use 5.012;
my $string = "4 2 6 7";
my @test = split /\s+/, $string;

for( 0 .. 9 ) {
    say "$_ is contained in $string" if $_ ~~ @test;
}

perlsyn中可以找到关于智能匹配运算符的强大功能的讨论。它可能有点棘手,因为它不是一个关联运算符,规则根深蒂固在DWIMery而不是一致性。但它非常强大。

答案 3 :(得分:1)

使用此正则表达式将变量i与单词边界匹配(假设您的数字字符串在每个整数后面都有空格):

/\b$i\b/

答案 4 :(得分:0)

这是一个不关心字符串的分隔符或格式的版本。它只是提取数字序列并将它们与搜索模式进行比较。

为方便起见,我把它变成了一个子程序和一个功能程序。

use warnings;
use strict;

my $string = "4 22 6 7";
my $i = shift; # number you want to search for
print "Checking '$string' for: '$i'\n";
print "Result is: ", (is_in($string, $i) ? "Yes" : "No");

sub is_in {
    my ($string, $i) = @_;
    while ( $string =~ /(\d+)/g ) {
        return 1 if ( $1 == $i );
    }
    return 0;
}

示例输出:

C:\perl>t4.pl 4
Checking '4 22 6 7' for: '4'
Result is: Yes
C:\perl>t4.pl 22
checking '4 22 6 7' for: '22'
Result is: Yes
C:\perl>t4.pl 2
checking '4 22 6 7' for: '2'
Result is: No

答案 5 :(得分:0)

您可以借助split功能轻松完成。

use warnings;

my $string = "4 2 6 7";
my $i = 6; #use any value of $i

my @x = split / /, $string;
my $count = 0;

foreach (@x)
{
     if($_ == $i) 
     { 
     print "matched at position $count"; die $!;
     }

$count++;
}
print "integer doesn't found in string";

在键盘上尝试:http://codepad.org/f5a86c9s