如何匹配perl正则表达式中最后一次出现char之后的所有内容?

Dav*_*d B 16 regex perl

例如,返回后是最后一个字符串的一部分xaxxxghdfx445(应返回445).

Eug*_*ash 19

my($substr) = $string =~ /.*x(.*)/;
Run Code Online (Sandbox Code Playgroud)

来自perldoc perlre:

默认情况下,量化的子模式是"贪婪的",也就是说,它将尽可能多地匹配(给定一个特定的起始位置),同时仍然允许模式的其余部分匹配.

这就是为什么.*x会匹配到最后一次出现的原因x.


rek*_*o_t 11

最简单的方法是使用 /([^x]*)$/


ben*_*uth 6

第一个答案是一个好的,但在谈论"不包含的东西"时...我喜欢使用"匹配"它的正则表达式

my($substr) = $string =~ /.*x([^x]*)$/;
Run Code Online (Sandbox Code Playgroud)

在某些情况下非常有用

  • 你不需要在正则表达式中使用前导'.*x'. (2认同)

gho*_*g74 5

最简单的方法不是正则表达式,而是一个简单的 split() 并获取最后一个元素。

$string="axxxghdfx445";
@s = split /x/ , $string;
print $s[-1];
Run Code Online (Sandbox Code Playgroud)