首页 > 解决方案 > 如何使用perl正则表达式解析java文件

问题描述

我想了解更多关于在 perl 中使用正则表达式来解析文本的方法,方法是解析一个简单的 .java 文件以从中找出所有 int、boolean、double 和 string 变量(无数组)并将这些变量放入它们各自的 perl 数组中. 例如,如果 .java 文件中有一个名为 'x' 的 int 变量,perl 会将字符串 'x' 插入到包含所有 int 变量的数组中,对于双精度数、布尔值和字符串,依此类推。虽然我可以在 perl 中打开文件并进行基本的粘贴,例如将文本行打印到终端,但不幸的是,我真的不知道如何做任何涉及使用正则表达式的更复杂的事情

到目前为止,这是我在 perl 脚本中写下的内容:

use strict;
use warnings;
print "enter the name of the java file you want to parse:\n";
my $javafile = <STDIN>;
chomp $javafile;
my @listofdubs=();
my @listofints=();
my @listofbools=();
my @listofstrings=();

open my $info, $javafile or die "Could not open $javafile: $!";

while( my $line = <$info>)  {   
    #print "$line\n"; 
}

close $info;

这是我编写的一个简单的 java 文件,其中包含一些 int、boolean、double 和 string 变量:

public class examplejava{
    public static void main(String[] args) {
        System.out.println("Hello, World");
        int thing= 70;
        int boo = 31;
        boolean example3= false;
        String example1= "stack";
        String example2= "overflow";
        double example6= 4.32;
        boolean example4= true;
        double example5= 2.4349;
    }
}

标签: regexperl

解决方案


虽然这在一般情况下可能非常困难,但对您的样本数据做一些事情就足够简单了:

#!/usr/bin/perl

use strict;
use warnings;

my @listofdubs    = ();
my @listofints    = ();
my @listofbools   = ();
my @listofstrings = ();

while (<>) {
  push @listofdubs,    $1 if /\bdouble\s+(\w+)/;
  push @listofints,    $1 if /\bint\s+(\w+)/;
  push @listofbools,   $1 if /\bboolean\s+(\w+)/;
  push @listofstrings, $1 if /\bString\s+(\w+)/;
}

print "@listofdubs\n";

(我已经删除了所有用户提示的东西。相反,它接受一个文件名作为命令行参数。)


推荐阅读