例如,返回字符串
axxxghdfx445
中最后一个 x
后面的部分(应该返回 445
)。my($substr) = $string =~ /.*x(.*)/;
根据perldoc perlre:
默认情况下,定量子模式是"贪婪"的,也就是说,在允许模式其余部分匹配的情况下,它将尽可能多地匹配(在特定的起始位置)。
这就是为什么.*x
会匹配到最后一个x
出现的原因。
/([^x]*)$/
。my ($substr) = $string =~ /.*x([^x]*)$/;
在某些情况下非常有用。
$string="axxxghdfx445";
@s = split /x/ , $string;
print $s[-1];
print (split /x/, $string)[-1];
同样可以很好地工作。 - Zaid我很惊讶没有人提到可以使用特殊变量来实现这一点,即$'
:"$'
" 返回匹配字符串后面的所有内容。(perldoc perlre)
my $str = 'axxxghdfx445';
$str =~ /x/;
# $' contains '445';
print $';
my $str = 'axxxghdfx445';
$str =~ /x/p;
# ${^POSTMATCH} contains '445';
print ${^POSTMATCH};
/x([^x]*)$/
更好... 我太过于沉迷于描述 $'
,而其他人都忽略了它。 - Ether还有一种方法可以实现这个功能。虽然这不像用单个正则表达式那么简单,但如果你追求速度,这种方法很可能比使用正则表达式的任何方法都要快,包括split
。
my $s = 'axxxghdfx445';
my $p = rindex $s, 'x';
my $match = $p < 0 ? undef : substr($s, $p + 1);
正则表达式:/([^x]+)$/
#假设 x 不是字符串的最后一个元素。
.*
。 - Stack Underflow'x'
(也称为浮动子串)的最后一次出现来确定组的起始位置,要么在没有'x'
的情况下声明无匹配。 - Eugene Yarmash