2012-07-17 208 views
0

下面的两个字符串是完全相同的,但我无法使用正则表达式匹配?有人能帮助我吗?字符串匹配不包括括号

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

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

回答

0

匹配字符串$ y中的圆括号被解释为分组或捕获。他们需要被“逃脱”,以便他们可以被视为正常人物。

在赋值$ y后放置下面的代码。

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

's'代表'替代'。
'g'代表'全球'替代。即,替换字符串中的所有事件。

+0

这是行得通的。谢谢 – 2012-07-18 18:50:37

+0

不客气! (欢迎来到StackOverflow!在这一点上,你应该'接受'我的回答,鼓励我......; ^) – marklark 2012-07-19 16:51:43

1

使用quotemeta

my $x="Enzyme(s)"; 
my $y="Enzyme(s)"; 
$y = quotemeta($y); 
if ($x =~ /^$y$/){print "String Matches"}; 
0

你应该使用quotemeta为M42已经提到的,或避免一个额外的代码行,$ Y变量的永久性变化,您可以使用该禁用的正则表达式的\Q...\E范围内的所有模式元字符:

my $x="Enzyme(s)"; 
my $y="Enzyme(s)"; 
if ($x =~ /^\Q$y\E$/){print "String Matches"}; 
相关问题