perl正则表达式匹配最接近

src*_*ulo 4 regex perl match closest

我正试图从最后一个项目壁橱到最后一个单词匹配.

例如,最接近狗的b

"abcbdog"

应该是"bdog"

但相反,我得到"bcbdog"

我怎样才能匹配"狗"之前的最后一次出现"b"

这是我目前的正则表达式:

/b.*?dog/si
Run Code Online (Sandbox Code Playgroud)

谢谢!

mu *_*ort 7

正则表达式想要从左到右但你想要从右到左,所以只需反转你的字符串,反转你的模式,然后反转匹配:

my $search_this  = 'abcbdog';
my $item_name    = 'dog';
my $find_closest = 'b';

my $pattern = reverse($item_name)
            . '.*?'
            . reverse($find_closest);

my $reversed     = reverse($search_this);
$reversed        =~ /$pattern/si;
my $what_matched = reverse($&);
print "$what_matched\n";
# prints bdog
Run Code Online (Sandbox Code Playgroud)