正则表达式删除HTML字符串

时间:2009-06-27 07:22:08

标签: html regex

我正在尝试删除与我的模式不匹配的字符串的一部分。例如,在

<SYNC Start=364><P Class=KRCC>
<Font Color=lightpink>abcd

我想删除

<P Class=KRCC><Font Color=lightpink>

我该怎么做?

3 个答案:

答案 0 :(得分:3)

您的问题并不表示您需要(或应该使用)正则表达式。如果要删除固定字符串,请执行传统搜索和替换。

答案 1 :(得分:1)

只需匹配“您的模式”并将其写入文件或更新数据库表。这样,你删除其余的。

答案 2 :(得分:1)

如果要解析的HTML有效且始终遵循已知的标准格式,则可以使用非贪婪模式删除大多数不需要的内容。

必须根据您用来处理正则表达式的工具/框架修改这些示例。为简洁起见,我没有逃避特殊字符。

匹配任何段落标记:

<p.*?>(.*?)</p>

您可以将这些匹配替换为$ 1(或访问组所需的语法)。

使用非贪婪(?)模式以避免意外匹配两个不相关的开始/结束标记非常重要。例如:

<p.*>(.*)</p>

行为会有很大不同。对于以下示例HTML,它将无法正确匹配两个段落:

<p>Lorem ipsum.</p><p>Lorem ipsum.</p>

相反,它会将“<p>Lorem ipsum.</p><p>”作为第一部分,这会导致内容丢失。

如果您需要将段落与特定类匹配,可以使用以下内容:

<p.*?class="delete".*?>(.*?)</p>

当您开始使用非标准化HTML时,事情变得棘手。例如,这都是有效的HTML,但清理它的模式会很难看:

<p>no class</p>
<p class=delete>no quotes</p>
<p class="delete">double quotes</p>
<p class='delete'>single quotes</p>
<p>space in closing tag</p >
<p>no closing tag