我正在尝试将.java文件读入perl变量,我想匹配一个函数,例如:
public String example(){
return "hello";
}
这样的正则表达式会是什么样的?
当前尝试:
use strict;
use warnings;
open ( FILE, "example.java" ) || die "can't open file!";
my @lines = <FILE>;
close (FILE);
my $line;
foreach $line (@lines) {
if($line =~ /String example(.*)}/s){
print $line;
}
}
答案 0 :(得分:2)
答案 1 :(得分:1)
Revo的正则表达式是正确的方法(就像正则表达式一样!)。
但有时你只需要快速操作,操纵你可以控制的文件。我发现,在使用正则表达式时,通常很重要的是定义&#34;足够好&#34;。
所以,它可能足够好&#34;假设缩进是正确的。在这种情况下,您可以只检测fn的开头,然后读取,直到找到下一个具有相同缩进的结束卷曲:
( # Capture \1.
^([\t ])+ # Match and capture leading whitespace to \2.
(?:\w+\s*)? # Privacy specifier, if any.
\w+\s*\( # Name and opening round brace: is a function.
.*? # Need Dot-matches-newline, to match fn body.
\n\2} # Curly brace is as indented as start of fn.
) # End capture of \1.
应该使用您自己编写的干净代码,代码可以先通过自动格式化程序等等。
将与K&amp; R,Hortmann和Allman indent styles合作。
使用单行和内联函数将失败,以及GNU,Whitesmiths,Pico,Ratliff和Pico等缩进样式 - Rico的回答完全没有任何问题
对于使用泛型的lambdas,嵌套函数和函数,也失败了,但即使是Revo也不认识那些,但它们并不常见。< / p>
我们的正则表达式都没有捕获函数之前的注释,这非常有罪。