Perl正则表达式 - 读取java文件并匹配文件中函数的整个文本

时间:2017-09-05 14:55:09

标签: regex perl

我正在尝试将.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;
 }
}

2 个答案:

答案 0 :(得分:2)

** Adopted from this answer

正则表达式:

(1)

故障:

C

答案 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>

我们的正则表达式都没有捕获函数之前的注释,这非常有罪。