字符串匹配不包括括号
问题描述:
下面的两个字符串是完全相同的,但我无法使用正则表达式匹配?有人能帮助我吗?字符串匹配不包括括号
$x="Enzyme(s)"; $y="Enzyme(s)";
if ($x =~ /^$y$/){print "String Matches"};
答
匹配字符串$ y中的圆括号被解释为分组或捕获。他们需要被“逃脱”,以便他们可以被视为正常人物。
在赋值$ y后放置下面的代码。
$y =~ s/\(/\\(/g; # escape left parens
$y =~ s/\)/\\)/g; # escape right parens
's'代表'替代'。
'g'代表'全球'替代。即,替换字符串中的所有事件。
答
使用quotemeta:
my $x="Enzyme(s)";
my $y="Enzyme(s)";
$y = quotemeta($y);
if ($x =~ /^$y$/){print "String Matches"};
答
你应该使用quotemeta
为M42已经提到的,或避免一个额外的代码行,$ Y变量的永久性变化,您可以使用该禁用的正则表达式的\Q...\E
范围内的所有模式元字符:
my $x="Enzyme(s)";
my $y="Enzyme(s)";
if ($x =~ /^\Q$y\E$/){print "String Matches"};
这是行得通的。谢谢 – 2012-07-18 18:50:37
不客气! (欢迎来到*!在这一点上,你应该'接受'我的回答,鼓励我......; ^) – marklark 2012-07-19 16:51:43