我有以下Java代码
fun(GUIBundle.getString("Key1"), GUIBundle.getString("Key2"));
我使用Perl来解析源代码,看看是否在$ gui_bundle中找到了“Key1”和“Key2”。
while (my $line = <FILE>) {
$line_number++;
if ($line =~ /^#/) {
next;
}
chomp $line;
if ($line =~ /GUIBundle\.getString\("([^"]+)"\)/) {
my $key = $1;
if (not $gui_bundle{$key}) {
print "WARNING : key '$key' not found ($name $line_number)\n";
}
}
}
但是,对于我编写代码的方式,我只能验证“Key1”。我如何验证“Key2”?
答案 0 :(得分:4)
添加g
修饰符并将其放入while
循环:
while ($line =~ /GUIBundle\.getString\("([^"]+)"\)/g) { ...
答案 1 :(得分:1)
只需在列表上下文中使用/g
修饰符进行正则表达式匹配:
@matches = $line =~ /GUIBundle\.getString\("([^"]+)"\)/g;
根据您的示例行,@matches
将包含字符串:'Key1'
和'Key2'
。
答案 2 :(得分:0)
将if
构造与while
交换,并使用全局匹配修饰符/g
:
while (my $line = <FILE>) {
$line_number++;
next if $line =~ /^#/;
chomp $line;
while ($line =~ /GUIBundle\.getString\("([^"]+)"\)/g) { #"
my $key = $1;
warn "key '$key' not found ($name $line_number)" unless $gui_bundle{$key};
}
}