regex - 可以在 if 条件下比较部分字符串吗?

标签 regex perl

下面的脚本实现了我想要的功能,但是有两行额外的正则表达式似乎是错误的。

第一个 / 之前部分的长度可以是任意长度,所以我不认为我可以使用 substr()...

问题

是否可以避免两个额外的正则表达式行并在 if 条件中执行它?

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my $a = "tank5/a/b";
my $b = "pool/a/b";

$a = $1 if $a =~ qr{.+?/(.+)};
$b = $1 if $b =~ qr{.+?/(.+)};

if ($a eq $b) {
    print "same\n";
}

最佳答案

你可以尝试:

print "same\n" if (last_part($a) eq last_part($b));
sub last_part { $_[0] =~ s{^.*?/}{/}r }

如果你没有 5.14+,你就必须使用一些更冗长的东西。

sub last_part { my ($s) = @_; $s =~ s{^.*?/}{/}; $s }

关于regex - 可以在 if 条件下比较部分字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649069/

相关文章:

javascript - 使用正则表达式解析旋转3d值的CSS变换

perl - 将公钥参数从 Crypt::OpenSSL::RSA 转换为 JWK 失败

regex - Perl 匹配同一行上的多个字符串(双引号和单引号内的任何内容)

perl - 如何一次在xt中运行测试?

正则表达式检查 Facebook 视频 URL

javascript - 替换部分属性值

python - 如何搜索并替换 soup 对象中的文本?

python - 在 Python 中使用正则表达式对数据进行分组

perl - 为什么 fields pragma 与 Perl 中的多重继承不兼容?

regex - 如何在Perl中遍历正则表达式匹配变量?