【问题标题】:Parsing help in regular expression for missing closing </table> tag解析正则表达式中缺少关闭 </table> 标记的帮助
【发布时间】:2012-02-01 01:33:42
【问题描述】:

我需要检索 table tag 之间的所有数据。但最近由于现场的一些更新,他们忘记在其中一张表中包含结束标签。 原始源代码在这里:

<table><tr><td><b>Semester:</b></td><td><b>5</b></td><td></td><td>&nbsp;&nbsp;&nbsp;&nbsp;<b> Result:&nbsp;&nbsp;SECOND CLASS </b></td></tr></table><hr>

<table><tr><td width=250>Subject</td><td width=60 align=center>External </td><td width=60 align=center>Internal</td><td align=center width=60>Total</td><td align=center width=60>Result</td></tr><br><tr><td width=250><i>Software Engineering (06IS51)</i></td><td width=60 align=center>45</td><td width=60 align=center>19</td><td width=60 align=center>64</td><td  width=60 align=center><b>P</b></td></tr><tr><td width=250><i>Systems Software (06CS52)</i></td><td width=60 align=center>48</td><td width=60 align=center>20</td><td width=60 align=center>68</td><td width=60 align=center><b>P</b></td></tr><tr><td width=250><i>Operating Systems (06CS53)</i></td><td width=60 align=center>37</td><td width=60 align=center>21</td><td width=60 align=center>58</td><td width=60 align=center><b>P</b></td></tr><tr><td width=250><i>Database Management Systems (06CS54)</i></td><td width=60 align=center>38</td><td width=60 align=center>19</td><td width=60 align=center>57</td><td width=60 align=center><b>P</b></td></tr><tr><td width=250><i>Computer Networks - I (06CS55)</i></td><td width=60 align=center>58</td><td width=60 align=center>20</td><td width=60 align=center>78</td><td width=60 align=center><b>P</b></td></tr><tr><td width=250><i>Formal Languages & Automata Theory (06CS56)</i></td><td width=60 align=center>58</td><td width=60 align=center>21</td><td width=60 align=center>79</td><td width=60 align=center><b>P</b></td></tr><tr><td width=250><i>Database Applications Laboratory (06CSL57)</i></td><td width=60 align=center>49</td><td width=60 align=center>20</td><td width=60 align=center>69</td><td width=60 align=center><b>P</b></td></tr><tr><td width=250><i>Algorithms Laboratory (06CSL58)</i></td><td width=60 align=center>20</td><td width=60 align=center>18</td><td width=60 align=center>38</td><td width=60 align=center><b>P</b></td></tr><br><br><hr>

<table><tr><td><b>Semester:</b></td><td><b>3</b></td><td></td><td> &nbsp;&nbsp;&nbsp;&nbsp;<b> Result:&nbsp;&nbsp;SECOND CLASS </b></td></tr></table><hr>

<table><tr><td width=250>Subject</td><td width=60 align=center>External </td><td width=60 align=center>Internal</td><td align=center width=60>Total</td><td align=center width=60>Result</td></tr><br><tr><td width=250><i>Electronic Circuits (06CS32)</i></td><td width=60 align=center>35</td><td width=60 align=center>15</td><td width=60 align=center>50</td><td  width=60 align=center><b>P</b></td></tr></table><br><br>

<table><tr><td></td><td></td><td>Total Marks:</td><td> 50 &nbsp;&nbsp;&nbsp; </td></tr></table>                      

我使用下面的正则表达式进行匹配,它工作正常,但您可以注意到最近的更新忘记在第二个表格元素中包含表格的结束标记,它正在破坏代码。

"|<table>.*<\/table>|U"

请帮助我形成一个表达式来匹配表之间的数据。 任何帮助将不胜感激。 谢谢。

【问题讨论】:

  • 当正则表达式和 HTML 解析功能出现问题时,StackOverflow 应该真正自动链接到此:stackoverflow.com/a/1732454/78845
  • 建议不要使用正则表达式解析 HTML。您使用的是什么服务器端语言? PHP?
  • 您正在使用哪种语言/库?为它找到合适的 HTML 解析器。
  • @Johnsyweb 请注意,一方面只有 HTML 的某些部分是不规则的,另一方面有一些正则表达式库支持递归模式匹配。
  • @Gumbo:注意到了,但我仍然会选择经过验证的解析器,以实现健壮性、可读性和可维护性!

标签: regex html-parsing


【解决方案1】:

您实际上可以决定从第一个&lt;tr&gt; 标记到最后一个&lt;/tr&gt;(含)之间获取数据,而不是获取&lt;table&gt; 标记之间的数据

/(<tr>.*<\/tr>)/

【讨论】:

  • 它只是较大应用程序的一小部分。功能和整个逻辑是在从表标签收集的数据上实现的。因此,我必须按照您建议的任何帮助来获取表之间的整个数据而不是单个数据
  • 如果我说您需要在第一个表示例中检索此数据,我是否理解正确? &lt;tr&gt;&lt;td&gt;&lt;b&gt;Semester:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt; Result:&amp;nbsp;&amp;nbsp;SECOND CLASS &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;如果是这样,这就是正则表达式正在做的事情,否则请纠正我:)
  • 是的,同样我想检索所有表,但在第二个表结束标记丢失,所以它需要数据到第三个结束表标记
  • 这实际上是我写的正则表达式返回的内容。你可以在这里查看:regex test。您的正则表达式中的“U”选项可能有问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多