2011-12-12 110 views
-3

我得到一個誤差範圍,而與像以下條款正則表達式匹配:錯誤[]無效的範圍

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

有人能告訴我如何關閉這樣的字符,如括號,操作範圍等的影響?

+0

你應該嘗試在你的問題更徹底地解釋你的問題,而不是從你敲詐在評論中回答。 – flesk

回答

3

這並不難 - 只需在\Q之前和\E之後使用此術語。

說, /\Q(4-{[2-(3-Iodobenzyl)-3-Oxocyclohex\E/

您在給定的期限內只能有\E

1

有逃逸/引用的經營者的兩種方法:使用\Q...\E

只是\Q...\E附上字符串中使用quotemeta

my $var = quotemeta("(5r)-6-(4-{[2-(3-...") 

print "match\n" if($input =~ m/hello $var world/) ; 
    1. 也逃脫任何正則表達式運營商。

      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/) 
      
  • +0

    我有一個單詞的列表,我必須匹配,它適用於休息,但不是像這樣的條款,如果($ z =〜m/\ b \ $ a [$ i] $ \ b/i)。 。其中$ a [$ i]具有上述名稱,因此上述術語是要匹配的整個字符串\ – nandini

    +0

    還有一個問題是,如果我使用上述\ Q .. \ EI能夠轉義破折號字符。我的問題是如果我必須匹配doxorubicin perl即使對epi-doxorubicin也給我一個匹配。請告訴我如何使用\ Q .. \ E和確切的術語 – nandini

    +0

    我不確定我的理解。所以你的文本(如你的問題中的文本)在數組「@ a」中?你想匹配整個輸入字符串'$ z'?然後嘗試:'if($ z =〜m/^ \ Q $ a [$ i] \ E $ /)' – vstm