2014-07-22 117 views
0

我正在尝试在perl中进行正则表达式匹配,但我不知道如何得到它。基本上,我想提取从下面的字符串的数目(其可以是或可以不是在其内有新行)与perl匹配正则表达式

     <strong> 
        word 
         </strong> 
        </td><td align="right"> 
          <strong> 
         65&nbsp;&nbsp; 
          </strong> 
         </td><td align="right"> 
          <strong> 
         5,000&nbsp;&nbsp; 
          </strong> 
         </td><td align="right"> 
          <strong> 
         -&nbsp;&nbsp; 
          </strong> 

<tr><td colspan="2">word</td><td align="right">65&nbsp;&nbsp;</td><td align="right">5,000&nbsp;&nbsp;</td><td align="right">-&nbsp;&nbsp;</td></tr>

因此,对于上述两个字符串,我想匹配:65; 5000;和 - (意思是0)。

+1

你的标题有误导之嫌。 “匹配正则表达式”与“用正则表达式匹配html”不一样。这就是说,使用一个html解析器 – HamZa

+0

正则表达式是错误的工具。你应该真的使用HTML解析器。 – friedo

+0

使用像['Mojo :: DOM'](https://metacpan.org/pod/Mojo::DOM)这样的HTML解析器。正则表达式不是像这样解析html的工具。 – Miller

回答

0

你正在寻找的正则表达式如下:

/((\d+(,\d+)?)|-)/s 

...,而修改的“s”需要跨多行匹配的照顾。

但是,我同意HamZa,你实际上应该使用HTML解析器。特别是“ - ”符号很可能出现在HTML的其他地方。您可能会扩展正则表达式,如下所示:

/((\d+(,\d+)?)|-)&nbsp;+/s 

...但随后它已经开始变得丑陋。

0

商店上面的字符串,您已经提到的,可变的,让说你它存储在变量$海峡则:

use Data::Dumper; 
    my @numbers = ($str =~ /\d+?,*\d+|-/sg); 
    print Dumper @numbers;