regex - 如何使用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;
}
}
解决方案
虽然这在一般情况下可能非常困难,但对您的样本数据做一些事情就足够简单了:
#!/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";
(我已经删除了所有用户提示的东西。相反,它接受一个文件名作为命令行参数。)
推荐阅读
- python - Turtle 对 onkeypress 没有反应
- php - PHP 将 $_SESSION 变量从服务器插入/更新到用户会话中
- javascript - 如何在 HTML 中使用 JavaScript 在类之前和之后获取元素?
- java - writeArray 二进制文件未在 readArray 中显示完整数组
- r - 如何制作一个循环两个列表的R函数
- mod-rewrite - 重写规则问题 - 捕获唯一标识符
- synchronization - 以太坊中的状态条目总数
- python - 嵌入之前的 Keras Lambda 层:用于将文本转换为整数
- javascript - Toastr 和 FontAwesome 5 未在成功消息中显示正确的图标
- authorization - OAuth2 (Okta):如何设置授权