2014-03-04 76 views
0

我有这个Perl文件,我试图从xml字符串打印某个元素,如果它具有属性tag = "915"。问题是,它不打印出整个元素,而只打印出915。 这是文件: Perl正则表达式组捕获 - 没有捕获组中的所有文本

print(get_marc_datafield("<datafield tag=\"915\">RandomStuff</datafield>"), "915"); 

sub get_marc_datafield { 
    my $xml = shift; 
    my $value = shift; 
    my $datafield = ""; 
    if($xml =~ m/.*(<datafield tag="$value".*<\/datafield>).*/) { 
     $datafield = $1; 
    } 
    return $datafield; 
} 

这应该打印出来<datafield tag="915">RandomStuff</datafield>

而是将其打印出来915

任何想法我做错了什么?我是否实施了不正确的组捕获?

+0

好吧,首先,您最好用合适的HTML解析器。 – Jerry

+0

也许,但这应该仍然很简单,我的错误可能是一个非常简单的错误。抛开HTML解析器,我的代码出了什么问题,以及我在组捕获时做错了什么? –

+0

我对perl并不完全熟悉,但是在我看来,就像你没有将参数'915'传递给函数一样,所以'$ value'不能被正则表达式识别,因此,你只能得到'打印(“915”)或类似的东西。 – Jerry

回答

5

括号混淆。你只传递一个参数给函数,并打印两件事。第二个是文字915。将两个参数都传递给该函数,并且只打印一件东西:

print get_marc_datafield("<datafield tag=\"915\">RandomStuff</datafield>", "915"); 
+0

传统观点认为,额外括号有助于可读性。我总是强烈反对,这是为什么。 – SzG