检测和提取Wingdings / Webdings /符号字符

时间:2014-03-31 10:25:29

标签: regex perl

    ................
    ................
    open(my $FILE, "<", "$dfn");
    binmode($FILE);
    @lines = <$FILE>;
    close($FILE);
    $data = join ('', @lines);

    foreach (0 .. $#lines) {
           if ($lines[$_] =~ m#Wingdings.*?>(.*?)<.*>#i) {
                $Wingdings_text_fetch = $1;
                if(!$Wingdings_text_fetch){
                      if ($lines[$_] =~ m#Wingdings.*>(.*)<#i){
                            $Wingdings_text_fetch = $1;
                      }
            }
          elsif ($lines[$_] =~ m#Webdings.*?>(.*?)<.*>#i) {
                $Webdings_font_text_fetch = $1;
                if(!$Webdings_font_text_fetch){
                     if ($lines[$_] =~ m#Webdings.*>(.*)<#i){
                            $Webdings_font_text_fetch = $1;
                      }
         }
          elsif ($lines[$_] =~ m#Symbol.*?>(.*?)<.*>#i) {
                $Symbol_font_text_fetch = $1;
                if(!$Symbol_font_text_fetch){
                     if ($lines[$_] =~ m#Symbol.*>(.*)<#i){
                            $Symbol_font_text_fetch = $1;
                     }
         }
      #....................some more task...............#
    }

以上情况适用于以下情况。

宋体:

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:13.0pt;mso-bidi-font-family:Arial;color:#000099'><a
href="#terug"><span style='font-family:Wingdings;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-char-type:symbol;mso-symbol-font-family:Wingdings'><span
style='mso-char-type:symbol;mso-symbol-font-family:Wingdings'>Ç</span></span></a></span></b><span
style='font-size:13.0pt;mso-bidi-font-family:Arial'><o:p></o:p></span></p>

符号:

<p class=MsoListParagraph style='margin-top:1.0pt;margin-right:0cm;margin-bottom:
1.0pt;margin-left:1.0cm;text-indent:-14.15pt'><span style='font-size:10.0pt;
font-family:Symbol;color:black'>·</span><span style='font-size:7.0pt;
color:black'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>some text</span></p>

但在以下情况下失败(主要是由于多线)。

<p class=MsoListParagraph style='margin-top:1.0pt;margin-right:0cm;margin-bottom:
1.0pt;margin-left:1.0cm;mso-add-space:auto;text-indent:-14.15pt;mso-list:l5 level1 lfo35'><![if !supportLists]><span
style='font-size:10.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
mso-bidi-font-family:Symbol;color:black;mso-ansi-language:NL-BE'><span
style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:black;mso-ansi-language:NL-BE'>some text here.<o:p></o:p></span></p>

关于什么应该是正则表达式的任何想法也包括最后一个案例?由于我在脚本中逐行检查,因此我无法在那里使用多行正则表达式。

2 个答案:

答案 0 :(得分:3)

我建议不要使用正则表达式来解析HTML。

而是使用实际的html解析器,如HTML::TreeBuilder或我个人最喜欢的Mojo::DOM。甚至还有一个很好的8分钟视频,介绍如何在Mojocast Episode 5使用后者。

答案 1 :(得分:2)

试试这个正则表达式:

font-family:(Wingdings|Webdings|Symbol).+?>([^<>]+)#is

要处理多行,请使用s修饰符,以便.匹配换行符。

描述

Regular expression visualization