我有这个html块:
<tr>
<th colspan="2" valign="middle">some text</th>
</tr>
<tr>
<td class="row1">lalala<span>dadada</span></td>
<td class="row2"><input name="unwantedinput"></td>
</tr>
<th colspan="2" valign="middle">some text</th>
</tr>
<tr>
<td class="row1">nanana<span>bababa</span></td>
<td class="row2"><input name="unwantedinput"></td>
</tr>
<tr>
<th colspan="2" valign="middle">Some other text</th>
</tr>
<tr>
<td class="row1">(this text needs to be extracted)</td>
<td class="row2"><input name="myUniqueInput"></td>
</tr>
<tr>
<th colspan="2" valign="middle">some text</th>
</tr>
<tr>
<td class="row1">lalala<span>dadada</span></td>
<td class="row2"><input name="unwantedinput"></td>
</tr>
我需要的是只提取“(这个文本需要提取)”之间的数据。这是我到目前为止所做的:
<th[^>]*>(.*?)<input[^>]*name="myUniqueInput"[^>]*>
这种模式的问题。它从一开始就匹配整个文本直到“myUniqueInput”.. 任何想法如何解决这个问题? 提前谢谢..
答案 0 :(得分:1)
/<td[^>]*>([^<]*)<[^>]*>\s*<td[^>]*>\s*<input[^>]*name="myUniqueInput"/
如果您知道html的外观,您可以随时匹配更多/更少。想法是在输入名称之前跳过td *。然后获取前一个td / td之间的所有内容。
答案 1 :(得分:0)
普遍认为正则表达式的表达力不足以正确解析HTML。您是否考虑过使用库来解析HTML,然后从那里提取数据?