如何在Perl中提取最后一次出现的字符?

时间:2018-02-15 12:04:01

标签: regex perl

我正在尝试提取字符串的特定部分。

输入字符串:$str = /wave=1/sin2=1/sin1=2/sin0=3

输出字符串:$str = /wave=1/sin2=1/sin1=2

方法1:

@waveSplitArray = split /\//,$str;

$lastOccuranceOfWave = pop @waveSplitArray;

如何使用正则表达式获得所需的输出?

3 个答案:

答案 0 :(得分:4)

最简单的方法是使用带有“保持”标志的贪婪量词\K

如果您想保留$str的值并将结果放入新变量

my $s2 = $str =~ s|.*\K/.*||r;

( my $s2 = $str ) =~ s|.*\K/.*||;

如果你想修改原始字符串,那么它只是

$str =~ s|.*\K/.*||;

答案 1 :(得分:1)

尝试

/(.*\/)[^\/]*/

,您将在$1中获得所需的模式。

Demo

答案 2 :(得分:0)

你也可以尝试这种方法

my $str = '/wave=1/sin2=1/sin1=2/sin0=3';

my ($st2) = $str =~m{(.+)/};

print $st2;

{(.+)/}

此处{}的作用类似于分隔符//(不要与量词混淆,例如\d{n}

.匹配除新行之外的任何字符,并使用+量词匹配1次或多次,然后匹配到END(因为+是贪心量词,检查步骤here),然后它会回溯/,当发现/后退曲目将终止时。并存储到捕获组()中,捕获组将存储到$st2变量中。

RegEx Demo