我有一个看起来像这样的字符串
my $source = "PayRate=[[sDate=05Jul2017,Rate=0.05,eDate=06Sep2017]],item1,item2,ReceiveRate=[[sDate=05Sep2017,Rate=0.06]],item3" ;
我想使用捕获组仅提取第一个PayRate
块中包含的[[...]]
值。
$1 = "Date=05Jul2017,Rate=0.05,EDate=06Sep2017"
我尝试了这个,但它返回整个字符串。
my $match =~ m/PayRate=\[\[(.*)\]\],/ ;
很明显,我必须在其中放置一系列{(.*)=(.*)}
块的特定模式。需要专家建议。
答案 0 :(得分:4)
您正在使用贪婪匹配.*
,在匹配时消耗尽可能多的输入,您首先匹配 {{ 1}}到 last [[
。
相反,请使用不情愿的匹配]]
,匹配为 little ,同时仍匹配:
.*?
答案 1 :(得分:0)
在匹配时使用/x modifier(并替换),这样您就可以使用空白区域来更轻松地阅读和评论,以了解正在发生的事情。通过匹配不在模式中的所有内容来限制模式。 [^\]]*?
优于.*?
。
my ( $match ) = $line =~ m{
Payrate \= \[\[ # select which part
( [^\]]*? ) # capture anything between square brackets
}x;