сопоставить строку и целое число в Perl - PullRequest
0 голосов
/ 08 июля 2011

У меня есть строка чисел, например "4 2 6 7", и переменная i, которая является целым числом. Как я могу решить, если i включен в строку? Код на перл ...

Ответы [ 6 ]

4 голосов
/ 08 июля 2011

Используйте эту функцию:

my $string = "4 2 6 7";
my $i = 4;
if ( $string =~ /\b$i\b/ ) {
    print "$string contains $i\n";
}
3 голосов
/ 08 июля 2011

Вы можете использовать split для создания массива из строки «4 2 6 7», а затем использовать grep для поиска в массиве.

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

РЕДАКТИРОВАТЬ: Или вместо этого вы можете использовать '==''eq' как оператор сравнения для сопоставления чисел вместо строк.

2 голосов
/ 08 июля 2011

Для удовольствия оператор умного совпадения ~~:

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, а не в согласованности. Но это очень мощно.

1 голос
/ 08 июля 2011

Используйте это регулярное выражение, чтобы сопоставить переменную i с границей слова (при условии, что в вашей строке чисел есть пробел после каждого целого числа):

/\b$i\b/
0 голосов
/ 08 июля 2011

Вы можете сделать это легко с помощью функции 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

0 голосов
/ 08 июля 2011

Вот версия, которая не заботится о разделителях или форматировании вашей строки.Он просто извлекает последовательности цифр и сравнивает их с шаблоном поиска.

Для удобства я превратил его в вспомогательную и функциональную программу.

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