2015-09-09 117 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)