以下两个字符串完全相同,但我无法使用正则表达式进行匹配?有人可以帮助我吗?
$x="Enzyme(s)"; $y="Enzyme(s)";
if ($x =~ /^$y$/){print "String Matches"};
答案 0 :(得分:1)
使用quotemeta:
my $x="Enzyme(s)";
my $y="Enzyme(s)";
$y = quotemeta($y);
if ($x =~ /^$y$/){print "String Matches"};
答案 1 :(得分:0)
匹配字符串中的括号$ y被解释为分组或捕获。它们需要“转义”,以便它们可以被视为普通字符。
在分配$ y后,请输入以下代码。
$y =~ s/\(/\\(/g; # escape left parens
$y =~ s/\)/\\)/g; # escape right parens
's'代表'替代' 'g'代表'全球'替代品。即,替换字符串中的所有匹配项。
答案 2 :(得分:0)
您应该使用quotemeta
作为M42已经提到过,或者为了避免额外的代码行和$ y变量的永久更改,您可以使用正则表达式中的\Q...\E
来禁用所有模式元字符在范围内:
my $x="Enzyme(s)";
my $y="Enzyme(s)";
if ($x =~ /^\Q$y\E$/){print "String Matches"};