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