Perl:如何将字符串的最后 n 位与 n 位或更多位连续数字相匹配?

Perl: How to match last n digits of a string with n consecutive digits or more?

我使用以下:

if ($content =~ /([0-9]{11})/) {
    my $digits = ;
}

从字符串中提取 11 个连续数字。但是,它会获取前 11 个连续数字。我如何才能提取最后 11 个连续数字,以便从 hdjf95724555199361?

的字符串中获取 24555199361
/([0-9]{11})/

表示

/^.*?([0-9]{11})/s   # Minimal lead that allows a match.

.* 变得贪婪,你就能得到你想要的。

/^.*([0-9]{11})/s    # Maximal lead that allows a match.

如果数字出现在字符串的最末尾,您还可以使用以下方法:

/([0-9]{11})\z/

每当您想匹配字符串末尾的内容时,请使用行尾锚点 $

$content =~ m/(\d{11})$/;

如果该模式不是最后一次,但您想要匹配该模式的“最后”出现,您将首先将“整个字符串”与 /.*/ 匹配,然后回溯到最后一次出现的模式。 /s 标志允许 . 元字符匹配换行符。

$content =~ m/.*(\d{11})/s;

有关详细信息,请参阅 Perl regexp tutorial