【发布时间】:2013-03-19 23:40:37
【问题描述】:
我正在努力在 Perl 中使用正则表达式来匹配带有可选前缀和后缀的字符串。
这是我目前的表达:
my $string = "prefix1_foo_suffix2";
if ($string =~ m/^(prefix1_|prefix2_)?(prefix3_|prefix4_)?foo|bar(_suffix1|_suffix2)?$/) {
print "match"
};
所以这应该匹配像
这样的字符串prefix1_foo_suffix2
prefix1_prefix4_bar
bar_suffix2
但不是
prefix1_baz_suffix2
bar_suffix42
据我所知,这匹配任何后缀(即:“foo”或“bar”之后的任何内容)。关于我做错了什么有什么想法吗?
【问题讨论】:
-
那是因为它是可选的,换句话说:所有需要匹配的是 foo|bar,并且 bar_suffix42 符合条件。但是,如果 prefix1_baz_suffix2 这样做,我会感到惊讶,因为 baz 不是您所需匹配的一部分。