2015-09-09 69 views
0

我知道正则表达式不是正确的轨道来执行此解析工作,但它是从我身边推荐。正则表达式解析表和从HTML中选择

如果我有下面的HTML这个。我想从html表中解析所有选择信息。对于这个我已经使用

<table id='options_table'>\s*?(.+)?\s*?</table> 

但是,这上面给我空结果。

,然后解析所有选择从上面的正则表达式返回我会用

<SELECT.*?>(.*?)<\/SELECT> 

但两者越来越空的结果之上。

什么应该是表和选择正则表达式(从解析表html)?

HTML部分

<table id='options_table'> 
    <tr><td colspan=3><font size="3" class="colors_productname"> 
    <i><b>Color</b></i> 
    </font> 
    <br /><table cellpadding="0" cellspacing="0" border="0"><tr><td><img class="vCSS_img_line_group_features" src="/v/vspfiles/templates/192/images/Line_Group_Features.gif" /></td></tr></table> 
    </font></td></tr> 
    <tr> 
    <td align="right" vAlign="top"> 
    <img src="/v/vspfiles/templates/192/images/clear1x1.gif" width="1" height="4" border="0"><br /> 
    </td><td></td><td> 
    <SELECT name="SELECT___S15FTAN01___29" onChange="change_option('SELECT___S15FTAN01___29',this.options[this.selectedIndex].value)"> 
    <OPTION value="176" >Ivory/Grey</OPTION> 
    </SELECT>&nbsp;&nbsp; 
    </td></tr> 
    <tr> 
    <td align="right" vAlign="top"> 
    <img src="/v/vspfiles/templates/192/images/clear1x1.gif" width="1" height="4" border="0"><br /> 
    </td><td></td><td> 
    <SELECT name="SELECT___S15FTAN01___31" onChange="change_option('SELECT___S15FTAN01___31',this.options[this.selectedIndex].value)"> 
    <OPTION value="167" >0/3 months</OPTION> 
    <OPTION value="169" >3/6 months</OPTION> 
    <OPTION value="175" >6/9 months</OPTION> 
    </SELECT>&nbsp;&nbsp; 
    </td></tr> 
    </table> 
+1

总是推荐使用一些html解析器。正则表达式不是匹配html标签的正确工具 – nu11p01n73R

+0

我知道正则表达式不适合做这个解析工作,但它是从我这边推荐的。 –

+0

根据您使用的编程语言,您可能不得不使用类似于PHP中的双反斜杠。因为反斜杠本身需要被转义,否则你会例如跳过's'。 – syck

回答

1

我不知道,GoLang,但我可以告诉你在Perl中,我认为你将能够涉及到GoLang。
首先,正则表达式来存储table tag内容(https://regex101.com/r/tL7dA0/1):

$table = $1 if ($html =~ m/<table.*?>(.*)<\/table>/igs); 

正则表达式打印select标签(https://regex101.com/r/xJ0xU1/1)之间的所有事情:

while ($table =~ m/<select.*?>(.*?)<\/select>/isg){ 
      print $1."\n"; 
     } 

在你的情况下,如果HTML表包含在内表,那么外表的所有内容都将被选中。

i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z]) 
s modifier: single line. Dot matches newline characters 
g modifier: global. All matches (don't return on first match)