如何在一行中匹配2个模式

时间:2010-06-30 13:48:53

标签: perl

我有以下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”?

3 个答案:

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