2015-05-26 2 views
-2

Я пытаюсь найти строку внутри строки с Perl. Например:Найти только точную строку

str = "Hi sir, No data was received" 
strtofind = "No data was received" 

Я использую:

if(index($str,$strtofind) != -1) 

Но если сценарий получит другой вход, как: "Hi sir, No data sent" он соответствует тоже (No data).

Как установить ИСТИННЫЙ, если только он соответствует всем strtofind?

+1

Я не могу воспроизвести это. Не могли бы вы предоставить [MCVE] (http://stackoverflow.com/help/mcve)? – Biffen

+0

Любой шанс, что вы вводите в заблуждение логику '! ='? Выражение, которое вы используете, истинно, если строка найдена. Это помогло бы, если бы показало нам * полную * программу, урезанную до нескольких строк и все еще проявляющую проблему. – Jens

+0

Привет и спасибо, логика: 'ул = "Привет, сэр, никаких данных не было получено" strtofind = "Нет данных получено не было" #It матч если (индекс ($ ул, $ strtofind) = -! 1) { \t $ flagger = 1; } если ($ 0 == Наблюдатель YouTube) { ... код здесь ... } ул нет = "Привет, сэр, никаких данных был послан" strtofind = "Нет данных получено не было" матч #It тоже if (index ($ str, $ strtofind)! = -1) { \t $ flagger = 1; } ' – proquibas

ответ

0

Вы можете сделать это с помощью \Q и \E операторов:

my $str = "Hi sir, No data was received"; 
my $strtofind = "No data was received"; 
if ($str =~ /\Q$strtofind\E/) 
{ 
    print "Match\n"; 
} 
+0

Или ['quotemeta'] (http://perldoc.perl.org/functions/quotemeta.html). – Biffen

+0

Спасибо всем за вашу помощь, все правильно, я делал неправильное сравнение. – proquibas

2

Код, который вы дали ведет себя таким образом

DB<4> $str="Hi sir, No data was received" 

    DB<5> $strtofind="No data was received" 

    DB<6> $str2="Hi sir, no data sent" 

    DB<7> print index($str,$strtofind) 
8 
    DB<8> print index($str2,$strtofind) 
-1 

Который является правильно в соответствии с вашими требованиями. Если у вас возникли проблемы, это не с подбором, это в другом месте

Смежные вопросы