【发布时间】:2011-06-11 08:01:39
【问题描述】:
我目前正在尝试提出一个正则表达式,它将解析出如下内容:
原始 HTML:
<td align="center"><p>line 1</p><p>line 2</p><p>line 3</p></td>
预期的 HTML:
<td align="center">line 1<br />line 2<br />line 3</td>
请注意,整个 HTML 文档中还有其他 <p>...</p> 标记不能被触及。我只想在 <td> 或 <th> 中替换 <p>...</p>。
我还需要一个正则表达式来扭转这个过程。请注意,这些正则表达式必须在 VB/VBScript/Classic ASP 中工作,所以虽然我可以使用前瞻(我认为这是这里的关键),但我不能使用后瞻。我尝试过的一些正则表达式是:
1. <td[^>]*>(<p>.+<\/p>)<\/td>
2. <td[^>]*>(<p>.+<\/p>)+?<\/td>
3. <td[^>]*><p>(?:(.+?)<\/p><p>(.+))+<\/p><\/td>
4. <td[^>]*>(<p>(?:(?!<\/p>)).*<\/p>)+?<\/td>
5. <td[^>]*>(?:<p>(.+?)<\/p>)*(?:<p>(.+)<\/p>)<\/td>
6. <td[^>]*>(?:<p>(.+?)<\/p>)(?:<p>(.+)<\/p>)*(?:<p>(.+)<\/p>)<\/td>
我可以“作弊”并拉出整行然后手动解析它,通常是标准的 VB 字符串操作函数,但这绝对不是最优雅的方式,也不是最快的方式。必须有某种方法可以使用 RegEx 一次性完成。
最后我想带...
<td align="center"><p><span style="color:#ff0000;"><strong>line 1</strong></span></p><p>line 2</p><p>line 3</p></td>
...把它变成
<td align="center"><span style="color:#ff0000;"><strong>line 1</strong></span><br />line 2<br />line 3</td>
有什么想法(除了不使用正则表达式,哈哈)?
谢谢!
【问题讨论】:
-
您是否想过使用 HTML 解析器并对其应用一些 DOM 操作?
-
@Hank,该链接对那些还不明白 RegExes 为什么无法解析 HTML 的人没有帮助。
-
@Dour 这是我投票关闭时创建的自动评论,确实如此。有至少十几个其他骗子解释了为什么这是不可能的和一个坏主意,如果您希望关闭另一个骗子,所有这些都很容易找到。我选择这个是希望有趣的写作足以说服 OP,或者可能是成千上万的赞成票。我之前的所有努力似乎都没有效果。
-
我已经阅读了很多,也许是几十个关于此的其他问题、答案和 cmets。大多数(如果不是全部)使用正则表达式和 HTML 来解释问题,然而,更多的人每天都使用正则表达式来解析 HTML。我找不到我的例子,这就是我写这个问题的原因。如果我的具体情况不能使用单个正则表达式(甚至几个)来完成,那很不幸,但不是世界末日。我将不得不求助于其他手段。其他人可能对高级正则表达式有更多经验,并且可能想出了一个解决方法,因此提出了这个问题。
标签: html regex parsing asp-classic vbscript