2009-06-27 116 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