如何匹配包含括号的两个字符串。如何匹配perl中包含括号的两个字符串
perl代码在这里。
#!/usr/bin/perl -w
$a = "cat(S1)rat";
$b = "cat(S1)r";
if ($a =~ $b) {
printf("matching\n");
}
我没有得到所需的输出。
请帮助
SNK
如何匹配包含括号的两个字符串。如何匹配perl中包含括号的两个字符串
perl代码在这里。
#!/usr/bin/perl -w
$a = "cat(S1)rat";
$b = "cat(S1)r";
if ($a =~ $b) {
printf("matching\n");
}
我没有得到所需的输出。
请帮助
SNK
你必须逃离括号:
if ($a =~ /\Q$b/) {
print "matching\n";
}
并请避免使用变量名$a
和$b
他们保留排序。
此外,这里没有必要使用printf
。
试试这个代码:
my $p = "cat(S1)rat";
my $q = "cat(S1)r";
if (index($p, $q) == -1) {
print "Does not match";
} else {
print "Match";
}
这里有几个答案,但不是很多解决您的根本性的误解。
这里是你的问题的一个简化版本:
my $str = "tex(t)";
my $pattern = "tex(t)";
if ($str =~ $pattern) {
print "match\n";
} else {
print "NO MATCH\n";
}
此打印出NO MATCH
。
原因是=~
运营商的行为。 该运算符左侧的东西被视为字符串,而右侧的东西被视为模式(正则表达式)。
括号在模式中有特殊含义,但不在字符串中。
对于上述具体的例子,你可以用修复:
my $str = "tex(t)";
my $pattern = "tex\\(t\\)";
更一般地,如果你想在$pattern
(如*
,.
等),就可以逃脱“特殊字符”使用其他人提到的\Q...\E
语法。
它有道理吗?
通常情况下,您看不到以字符串表示的模式(与"tex(t)"
一样)。 写更常用的方法,这将是:
if ($str =~ /tex(t)/)
这可以通过书面形式固定:
if ($str =~ /tex\(t\)/)
注意,在这种情况下,由于您使用的是正则表达式对象(/.../
语法) ,您不需要像对待引用的字符串那样双重地避开反斜杠。
只需要一些关于'quotemeta'的附录,这个答案就完成了。 – Miller 2014-09-23 20:47:32
目前尚不清楚你正在尝试做什么。 '$ a'和'$ b'是不同的 - 你为什么期望它们以任何方式匹配?请详细描述你正在努力完成的任务。 – jwd 2014-09-23 16:19:08
首先把输入文件和预期的输出。然后,将代码粘贴到现在为止。具体然后我们可以很容易地得到你的答案。 – Praveen 2014-09-23 16:20:26
如果$ a =“catrat”和$ b =“catr”我得到输出“匹配”。但如果我给了$ a =“猫(S1)老鼠”和$ b =“猫(S1)r”,我不会得到输出“匹配”。请帮忙。 – snkatore 2014-09-23 16:27:06