2009-06-27 30 views
0

我试图删除与我的模式不匹配的字符串的一部分。例如,在正则表达式删除HTML字符串

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

我想删除

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

我该怎么办呢?

+0

我们不知道“我的模式”是什么意思。你需要提供更多信息。 – 2009-06-27 07:24:35

回答

1

只匹配`你的模式'并将其写入文件或更新数据库表。那样的话,你是其余的删除

3

你的问题并不表明你需要(或应该使用)正则表达式。如果你想删除一个固定的字符串,做传统的搜索和替换。

+0

我同意,如果您可以使用替换字符串函数,您也将获得性能优势 – Stuart 2009-06-27 08:35:50

+0

...并且如果要删除HTML节点,请使用HTML解析器。 – Svante 2009-06-27 10:42:45

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