2013-05-21 55 views
0

我有一个程序,它可以逐行读取文件,并在模式匹配时获取数据。
目前它提取模式,比如
function abc (int a, int b)
但我有一些功能,如
function xyz (int a, \n
int b)

它不匹配由于文件被读取线线。perl在一个文件中匹配多行模式

是否有可能以某种更好的方式读取文件,或者我应该使用获取多行的显而易见的技术。

回答

2

您需要一次读取多行。如果文件不是太大,你可以将整个文件夹入(例如http://www.perl.com/pub/2003/11/21/slurp.html),然后使用单行正则表达式(使用s选项,例如/stuff.next line/s)。

编辑多个匹配的示例* g选项允许您获取所有匹配项。一个示例用法是在一个while循环中,每次您评估正则表达式时您将获得下一个匹配。 有关更多详细信息和示例,请参阅Perl iterate through each match

while($string=~/(regex)/g){ 
    DoSomething($1); 
} 

编辑固定错误

+0

确定,所以,如果我跑我的整个文件的正则表达式不会返回它只是我每次运行它的第一场比赛,还是我失去了一些东西? – Venkat

+0

你可以在循环中使用你的regex和g选项来获得所有匹配。我将编辑我的答案以添加示例。 – Sysyphus

+0

如果它是一个大文件,最好的办法是做同样的事情? –