给出变量:
my $var1 = "fish";
my $var2 = "ocean";
我的输入字符串可以是 fishin_ocean 或 fishout_ocean 。
如何编写Perl正则表达式以匹配输入字符串,其中正则表达式的部分位于$var1
和$var2
?这个(字符串在$var3
中)不会返回上述任何一个字符串:
$var3 =~ /$var1.+?$var2/;
根据OP的回答编辑:
我认为最终导致问题的是特殊的方形牌
my $a = "slash_wideiscan"; my $b = "_mnn3h_reg[0]";
my @array1 = qw (slash_wideiscanps_mnn3h_reg[0]
slash_wideiscanptlr_mnn3h_reg[0]
slash_wideiscanps_mnn0h_reg);
for my $element (@array1) {
if ($element =~ /($a.+?$b)/) {
print "YES : $element\n";
} else {
print "NO : $element\n";
}
}
回来的答案是
NO : slash_wideiscanps_mnn3h_reg[0]
NO : slash_wideiscanptlr_mnn3h_reg[0]
NO : slash_wideiscanps_mnn0h_reg
我其实想要
YES : slash_wideiscanps_mnn3h_reg[0]
YES : slash_wideiscanptlr_mnn3h_reg[0]
NO : slash_wideiscanps_mnn0h_reg
答案 0 :(得分:1)
不太清楚你在寻找什么,但这是你的正则表达式:
my $fish = "fish";
my $ocean = "ocean";
for my $word ("fishin_ocean", "fishout_ocean") {
if ($word =~ /($fish.+?$ocean)/) { # parens capture to $1
print "Word $word matches\n";
print "The matching part is: $1\n"; # $1 contains the captured text
}
}
中的更多信息
答案 1 :(得分:0)
这应该有效:
/fish(in|out)_ocean/
答案 2 :(得分:0)
你的正则表达式很好。问题是你认为正则表达式返回匹配的字符串,但实际上,它只返回true或false(如果它匹配或不匹配)。
如果要捕捉匹配项,请在要捕获的部分周围使用括号。捕获按顺序存储在1美元,2美元,3美元等......
my ($var1, $var2, $var3) = ("fish", "ocean", "fishin_ocean")
$var3 =~ /($var1)(.+?$var2)/; # only returns true or false
print $1; # prints fish
print $2; # prints in_ocean
答案 3 :(得分:0)
根据您的回答(必须是对您的问题的更新),请使用\Q\E
来逃避正则表达式的每个部分,如下所示:
my $a = "slash_wideiscan";
my $b = "_mnn3h_reg[0]";
my @array1 = qw (slash_wideiscanps_mnn3h_reg[0]
slash_wideiscanptlr_mnn3h_reg[0]
slash_wideiscanps_mnn0h_reg);
for my $element (@array1) {
if ($element =~ /(\Q$a\E.+?\Q$b\E)/) {
here___^ ^ ^ ^
print "YES : $element\n";
} else {
print "NO : $element\n";
}
}
<强>输出:强>
YES : slash_wideiscanps_mnn3h_reg[0]
YES : slash_wideiscanptlr_mnn3h_reg[0]
NO : slash_wideiscanps_mnn0h_reg