0

以下两个字符串完全相同,但我无法使用正则表达式匹配?有人可以帮助我吗?

$x="Enzyme(s)"; $y="Enzyme(s)";

if ($x =~ /^$y$/){print "String Matches"};
4

3 回答 3

1

使用quotemeta

my $x="Enzyme(s)";
my $y="Enzyme(s)";
$y = quotemeta($y);
if ($x =~ /^$y$/){print "String Matches"};
于 2013-10-02T09:33:57.033 回答
0

匹配字符串中的括号 $y 被解释为分组或捕获。它们需要被“转义”,以便它们可以被视为普通字符。

在分配 $y 之后添加以下代码。

$y =~ s/\(/\\(/g;  # escape left parens
$y =~ s/\)/\\)/g;  # escape right parens

“s”代表“替代”。
“g”代表“全局”替换。即,替换字符串中的所有匹配项。

于 2012-07-17T22:21:00.823 回答
0

您应该使用quotemeta已经提到的 M42,或者为了避免额外的代码行和 $y 变量的永久更改,您可以\Q...\E在正则表达式中使用禁用范围内的所有模式元字符:

my $x="Enzyme(s)";
my $y="Enzyme(s)";
if ($x =~ /^\Q$y\E$/){print "String Matches"};
于 2013-10-02T09:54:42.027 回答