我试图使用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+)+$/
答案 0 :(得分: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);
...
}