2011-12-12 66 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