我有一个字符串,其中包含“foo”后跟数字.我想在字符串中的最后一个foo后打印数字.我被告知,实现这一目标的唯一方法是扭转字符串本身.这不是很优雅,我很惊讶Perl没有更好的方法来完成工作.有没有比这更好的方法呢?
#!/usr/bin/perl # works,but is ugly!!! $string = "foo1 foo3 foo5 bar foo911 baz"; $string = scalar reverse($string); $string =~ m/(\d+)oof/; print scalar reverse("$1");
解决方法
怎么样:
$string =~ /.*foo(\d+)/;
澄清:
$string =~ /.* # Match any character zero or more times,greedily. foo # Match 'foo' (\d+) # Match and capture one or more digits. /x;
贪婪的“任何角色”匹配将匹配字符串中的第一个“foo”,并且您将只留下匹配最后一个“foo”.
例:
#!perl -w use strict; use 5.010; my $string = "foo1 foo2 foo3"; $string =~ /.*foo(\d+)/; say $1;
输出:
% perl regex.pl 3