Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl与模式匹配_Perl - Fatal编程技术网

Perl与模式匹配

Perl与模式匹配,perl,Perl,我一直在研究一种东西,它可以获取一个带有参考书目的html文件,并删除除作者之外的所有内容。我很难摆脱一些无关的数据,比如html标记中的字符。我希望能够去掉整个标签,或者更好,标签之间的特定数据 现在我的潜艇是这样的: sub extractAuthorsIntoArray{ @author_array = split /[<>"\/?!.=\(\)1234567890':]/, $doc; foreach(@author_array){

我一直在研究一种东西,它可以获取一个带有参考书目的html文件,并删除除作者之外的所有内容。我很难摆脱一些无关的数据,比如html标记中的字符。我希望能够去掉整个标签,或者更好,标签之间的特定数据

现在我的潜艇是这样的:

    sub extractAuthorsIntoArray{
        @author_array = split /[<>"\/?!.=\(\)1234567890':]/, $doc;
        foreach(@author_array){
            print "$_" . "\n";
        }
    }
子提取器AuthorsInToArray{
@作者数组=拆分/[“\/?!.=\(\)1234567890':]/,$doc;
foreach(@author\u数组){
打印“$\”。\n;
}
}
此时,它所做的是去掉所有的标记字符,但它留下了一堆我不想要的无关数据,如发布日期、发布名称和其他我不需要的数据。任何时候我都试图去掉这些数据,比如说“
  • “它给了我新的数据,这些字符完全丢失了。无论如何,我会继续努力的

    拉特斯

    编辑:

    我想做的是采取如下措施:

    my @entries = ($doc =~ m{ <li (?: \s [^>] )? > (.*?) </li> }xmsg);
    
    Artem Chebotko和Shiyong Lu,“有效评估SPARQL嵌套可选图模式的嵌套可选连接”i> 语义网进化的进步概念:应用和发展,Miliadis Lytras和Amit Sheth(编辑),信息科学出版社,ISBN 160566992X,2010。

  • Artem Chebotko、Shiyong Lu、Farsad Fotouhi和Anthony Aristar,“语义网多媒体语言数据的基于本体的注释”i> 基于语义网络的信息系统:最新应用,Amit Sheth和Miliadis Lytras(编辑),IGI Global,ISBN 1599044269,2006。

  • 结果是:


    Artem Chebotko和Shiyong Lu我的建议是:不要使用正则表达式。相反,请使用CPAN提供的许多模块中的一个或多个。

    我的建议:不要使用正则表达式。取而代之的是,使用CPAN提供的许多模块中的一个或多个模块。

    如果不确定数据的结构,通常很难解决这个问题,但根据您的示例,我将假设作者始终是数据的第一个非标记内容,并以逗号结尾(这是一种非常常见的格式)

    这意味着问题有两个部分:去掉所有初始HTML标记,然后删除逗号后面的所有内容

    首先,HTML标记很容易识别,因为它以
    结尾,不能包含这两个字符中的任何一个。因此:

    $line =~ s{ \A \s* (?: < [^>]+ > \s* )+ }{}xms;
    
    现在,假设每个条目都是程序中的单个标量。这掩盖了一个相当大的问题;如果您有一个包含整个页面的变量,则可能需要对其进行解析。如果每个条目都是一个
  • 标记,则您要做的是提取每个
  • 标记的内容,然后进行处理如上所述

    为此,请在列表上下文中使用
    /g
    选项进行如下匹配:

    my @entries = ($doc =~ m{ <li (?: \s [^>] )? > (.*?) </li> }xmsg);
    
    my@entries=($doc=~m{])?>(.*?
  • }xmsg);

    这里还有一些更微妙的地方。
    (?:)?
    位在
    之后,以允许该标记的任何属性。
    (.*)
    部分执行提取标记内容的实际工作。请注意
    *
    之后。这使得匹配不贪婪,这意味着它不会将所有内容匹配到文档中最后一个
    标记,而是将所有内容匹配到第一个
    标记。最后是
    /g
    修饰符要求尽可能多次重复此匹配,并返回捕获的内容
    ()
    作为列表。

    如果不确定数据的结构,通常很难解决这个问题,但根据您的示例,我将假设作者始终是数据的第一个非标记内容,并以逗号(这是一种非常常见的格式)结尾

    这意味着问题有两个部分:去掉所有初始HTML标记,然后删除逗号后面的所有内容

    首先,HTML标记很容易识别,因为它以
    结尾,不能包含这两个字符中的任何一个。因此:

    $line =~ s{ \A \s* (?: < [^>]+ > \s* )+ }{}xms;
    
    现在,假设每个条目都是程序中的单个标量。这掩盖了一个相当大的问题;如果您有一个包含整个页面的变量,则可能需要对其进行解析。如果每个条目都是一个
  • 标记,则您要做的是提取每个
  • 标记的内容,然后进行处理如上所述

    为此,请在列表上下文中使用
    /g
    选项进行如下匹配:

    my @entries = ($doc =~ m{ <li (?: \s [^>] )? > (.*?) </li> }xmsg);
    
    my@entries=($doc=~m{])?>(.*?
  • }xmsg);

    这里还有一些更微妙的地方。
    (?:)?
    位在
    之后,以允许该标记的任何属性。
    (.*)
    部分执行提取标记内容的实际工作。请注意
    *
    之后。这使得匹配不贪婪,这意味着它不会将所有内容匹配到文档中最后一个
    标记,而是将所有内容匹配到第一个
    标记。最后是
    /g
    修饰符要求尽可能多次重复此匹配,并返回捕获的内容
    ()
    作为列表。

    这是一种非常……不寻常的……使用
    split
    的方法。当数据包含多个由分隔符分隔的数据项时,通常使用该方法来分割这些分隔符上的数据并检索单个项。这不是您在这里尝试的操作,因此
    split
    可能不是droid逗号你要找的那个

    如前所述,一个合适的HTML解析器确实是正确的方法
    #!/usr/bin/perl -w
    
    use strict;
    read DATA, my $string, -s DATA;
    my @matches = ( $string =~ /<\s+li\s*(?:.*?)>(.+?),\s+<\s+b>/g );
    print "$_\n\n" foreach (@matches);
    
    __DATA__
    < li value="2">Artem Chebotko and Shiyong Lu, < b>"Nested Optional Join for Efficient Evaluation of SPARQL Nested Optional Graph Patterns"< /b>. < i>Progressive Concepts for Semantic Web Evolution: Applications and Developments< /i>, Miltiadis Lytras and Amit Sheth (Eds.), Information Science Publishing, ISBN 160566992X, 2010.< br/>< br/>< /li> < li>Artem Chebotko, Shiyong Lu, Farshad Fotouhi, and Anthony Aristar, < b>"Ontology-Based Annotation of Multimedia Language Data for the Semantic Web"< /b>. < i>Semantic Web-Based Information Systems: State-of-the-Art Applications< /i>, Amit Sheth and Miltiadis Lytras (Eds.), IGI Global, ISBN 1599044269, 2006.< br/>< br/>< /li>
    
    a) < li value="2">AUTHORS, < b>
    b) < li>AUTHORS, < b>
    
    < \s+ li \s+ value="2"> (.+), \s+ <\s+b>
    
    < \s+ li> (.+), \s+ <\s+b>
    
    <\s+li\s*(?:.*?)>(.+?),\s+<\s+b>