我正在尝试提取字符串的特定部分。
输入字符串:$str = /wave=1/sin2=1/sin1=2/sin0=3
输出字符串:$str = /wave=1/sin2=1/sin1=2
方法1:
@waveSplitArray = split /\//,$str;
$lastOccuranceOfWave = pop @waveSplitArray;
如何使用正则表达式获得所需的输出?
答案 0 :(得分:4)
最简单的方法是使用带有“保持”标志的贪婪量词\K
如果您想保留$str
的值并将结果放入新变量
my $s2 = $str =~ s|.*\K/.*||r;
或
( my $s2 = $str ) =~ s|.*\K/.*||;
如果你想修改原始字符串,那么它只是
$str =~ s|.*\K/.*||;
答案 1 :(得分:1)
答案 2 :(得分:0)
你也可以尝试这种方法
my $str = '/wave=1/sin2=1/sin1=2/sin0=3';
my ($st2) = $str =~m{(.+)/};
print $st2;
{(.+)/}
此处{}
的作用类似于分隔符//
(不要与量词混淆,例如\d{n}
)
.
匹配除新行之外的任何字符,并使用+
量词匹配1次或多次,然后匹配到END(因为+
是贪心量词,检查步骤here),然后它会回溯/
,当发现/
后退曲目将终止时。并存储到捕获组()
中,捕获组将存储到$st2
变量中。