如何匹配包含括號的兩個字符串。如何匹配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