如何映射多行(每行使用perl具有相同的格式

问题描述 投票:0回答:1

我试图使用perl映射每个行内容,并且每行具有相同的格式。

我已成功映射第一行,但是一旦我在正则表达式后添加$,一切都会出错。但是如果我删除了$,则reguar表达式只能匹配第一行而其余部分才能匹配

这是内容

$bar ="0 qid:85 1:0.666667 2:0.666666 3:0.857143 #docid = 579
0 qid:85 1:0.666667 2:0.666666 3:0.857143 #docid = 579";

m/^([0-2])[\s]qid\:(\d+).*?\#docid[\s]=[\s](\d+)+$/
regex perl
1个回答
1
投票
  • 你需要/m来改变^$的定义来满足您的需求。 ^通常只在字符串的开头匹配。使用/m,它也可以在换行后匹配。 $通常只匹配字符串末尾和字符串末尾的换行符。使用/m,它也匹配任何换行。
  • 你需要/g来获得所有的比赛(而不仅仅是第一场比赛)。
  • [\s]是编写\s的奇怪方式。
  • (\d+)+(最后)应该是(\d+)
  • 我已经在模式中添加了空格以使其更具可读性,这可以使用/x实现。

固定:

while ( $bar =~ /^([0-2]) \s qid:(\d+) \s .*? \s \#docid \s = \s (\d+)$/mgx ) {
   my ($foo, $qid, $docid) = ($1, $2, $3);
   ...
}
© www.soinside.com 2019 - 2024. All rights reserved.