我试图使用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+)+$/
/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);
...
}