字符串匹配不包括括号

时间:2012-07-17 21:43:56

标签: perl brackets

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

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

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

3 个答案:

答案 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"};