在perl中搜索括号

时间:2011-10-09 05:40:21

标签: regex perl

编写一个程序,我从一个文件中读取一个单词/符号列表,然后在另一个文本正文中搜索每个文件。

所以它就像:

while(<FILE>){
    $findword = $_;

    for (@text){
        if ($_=~ /$find/){
            push(@found, $_);
        }
    }
}

然而,一旦出现括号,我就会遇到麻烦。它给了我这个错误:

Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE

我意识到这是因为Perl认为(是正则表达式的一部分,但我如何处理这个并使(可搜索?

5 个答案:

答案 0 :(得分:4)

您可以使用\Q and \E

if ($_ =~ /\Q$find\E/){

如果您只是在寻找文字匹配,请使用index

if(index($_, $find) >= 0) {

答案 1 :(得分:3)

通常反斜杠会转义正则表达式中的字符 - 即/\(/将匹配文字(

在这种情况下,最好使用报价运算符

if ( $_ =~ /\Q$find\E/ ) {
    ...
}

或者使用quotemeta

答案 2 :(得分:2)

您需要执行/\Q$find\E/而非/$find/ - \Q告诉解析器停止将元字符视为正则表达式的一部分,直到找到\E

答案 3 :(得分:1)

我怀疑您会发现m/\Q$find\E/有用 - 除非您希望将其他Perl正则表达式元字符解释为元字符。

答案 4 :(得分:0)

带有\Q

\e将在$find变量中转义您的特殊字符,如:

while(<FILE>){
    $findword = $_;

    for (@text){
        if ($_=~ /\Q$find\e/){
            push(@found, $_);
        }
    }
}