regex - 反向正则表达式搜索

标签 regex perl

我有一个字符串,其中包含后跟数字的“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

关于regex - 反向正则表达式搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876896/

相关文章:

perl - lwp 用户代理 504 网关超时

perl - 如何在Perl中运行匿名函数?

arrays - 如何使用 perl 从第一次出现具有特定值的元素开始遍历数组?

javascript - 当 Javascript 调用 Perl 脚本时捕获操作系统异常

python - 如何在 python 中正则表达式空字符串?

javascript - ASPX 形式的错误消息和验证数据

python - BeautifulSoup select 函数在 Python3.5.2 和 Python3.4.2 之间的工作方式不同

java - Java中的正则表达式,\\s vs.\\s+

python - 1 或 2 或 3 个十进制数的正则表达式,不允许有前导零,允许精度 2 和分数

perl - 如何确定是从命令行中调用脚本还是将其作为cgi脚本调用?