2012-07-25 99 views
1

好了,让我们说我有一个文件,我阅读下列之间搜索出于某种原因,我只得到Perl的关键词

foobarbar 

我使用下面的代码:

if (/File([\s\S]+?)xml/) { 
    $key= $1; 
    print OUTPUT "$key\n" 
} 

注意:在上面的代码中,$key设置为$number one,而不是$lower case letter L。任何帮助将不胜感激!

+0

顺便说一句, '/ [\ s \ S] /'与'/./ s'相同 – ikegami 2012-07-25 20:07:13

回答

2

该正则表达式只有第一个文件相匹配,使用/ G修饰符来获取所有匹配

while (/File:(.*)\.xml/g) { 
    $key = $1; 
    print OUTPUT "$key\n"; 
} 
+0

假设你已经把整个文件变成了'$ _',这不是通常的情况。 – Borodin 2012-07-26 10:05:43

+0

那么他没有具体说明他是如何阅读这个文件的。如果他把所有东西都嗅到了$ _,他可以使用我的解决方案。否则,他可以使用perreal的解决方案。 – 2012-07-26 13:35:05

2

下面的代码工作,当您逐行读取输入行预计:

while(<>) { 
    if (/File:([\s\S]+?)\.xml/){ 
    $key= $1; 
    print "$key\n"; 
    } 
}