Ошибка [] неверный диапазон - PullRequest
0 голосов
/ 12 декабря 2011

Я получаю ошибку диапазона при сопоставлении регулярных выражений с такими терминами, как показано ниже:

(5r)-6-(4-{[2-(3-Iodobenzyl)-3-Oxocyclohex-1-En-1-Yl]Amino}Phenyl)-5-Methyl-4,5-Dihydropyridazin-3(2h)-One

show range error at 2-(

Может кто-нибудь сказать мне, как отключить эффект таких символов, как скобки, оператор диапазона и т. Д.*

Ответы [ 2 ]

3 голосов
/ 12 декабря 2011

Это не сложно - просто используйте \Q до и \E после такого термина.

Скажи, /\Q(4-{[2-(3-Iodobenzyl)-3-Oxocyclohex\E/.

Вы не можете иметь только \E в данном сроке.

1 голос
/ 12 декабря 2011

Существует два метода экранирования / цитирования этих операторов:

  1. с использованием quotemeta

    my $var = quotemeta("(5r)-6-(4-{[2-(3-...")
    
    print "match\n" if($input =~ m/hello $var world/) ;
    
  2. используя \Q...\E

    Просто заключите вашу строку в \Q...\E и избежите любых операторов регулярных выражений.Вы можете использовать это непосредственно в регулярном выражении:

    if($input =~ m/hello \Q(5r)-6-(4-{[2-(3-Io...\E world/)
    

    Или с переменным расширением:

    my $var = "(5r)-6-(4-{[2-(3-Io...";
    if($input =~ m/hello \Q$var\E world/)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...