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