2011-07-08 34 views

回答

4

使用此功能:

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

如果字符串包含 “3.0” 和'i'是3,那么你的代码将不匹配。更好的是Himadri Choudhury的split/grep解决方案。 –

+0

是的,但它也会匹配时,我是0.但是,“我是一个整数”导致我的事情“数字串”实际上是一个“整数串” – ysth

+0

是'我'是整数,但他没有说字符串中的数字是整数。 –

1

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

/\b$i\b/ 
3

可以使用分割来创建从字符串“4 2 6 7”的阵列,然后用grep搜索数组。

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

编辑: 或者你可以用“==”,而不是“EQ”作为比较运算符来匹配数字而不是字符串。

+1

“eq”是一个字符串比较。更好的是“==”,那么“3.0”和“3”也会匹配。这可能是人们想要的。 –

+0

@Sid。好点子。值得一提的是'eq'和'=='之间的区别。 –

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而不是一致性。但它非常强大。

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 
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

相关问题