正则表达式解析表和从HTML中选择

时间:2015-09-09 10:38:38

标签: html regex

我知道正则表达式不适合执行此解析工作,但建议从我这边做。

如果我在下面有HTML。我想解析html表中的所有选择信息。为此,我使用了

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

但是上面给出了我的结果。

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

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

但是上面两个都是null结果。

Table和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 个答案:

答案 0 :(得分: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)