2012-06-26 80 views
0

我有一個HTML多嵌套引號,看起來像這樣:正則表達式HTML嵌套引號替換

<div class="quote-container"> 
    <div class="quote-block"> 
     <div class="quote-container"> 
     <div class="quote-block"> 
     </div> 
     </div> 
     <div class="quote-container"> 
     <div class="quote-block"> 
     </div> 
     </div> 
     <div class="quote-container"> 
     <div class="quote-block"> 
     </div> 
     </div> 
    </div> 
</div> 

我需要搜索並刪除引號。我使用表達式:

<div class="quote-container">.*<div class="quote-block">.*</div>.*</div> 

這適用於單引號。但是,多嵌套引號存在問題(上例)。

我的任務是搜索:

<div class="quote-container">.*<div class="quote-block"> 

加不含

<div 

.*</div>.*</div> 

我想回顧後結尾的字符串和向前斷言是這樣的:

<div class="quote-container">.*<div class="quote-block">.*(?!<div).*</div>.*</div> 

但他們不工作。

有沒有辦法做我的任務?我需要一個perl表達式,我可以在TextPipe中使用(我使用它來進行論壇分析,之後我會進行文本到語音轉換)。

在此先感謝。

+1

[必需鏈接](http://stackoverflow.com/a/1732454/1072112) – ghoti

+0

你說「有問題」,但不是,問題是什麼。您應該從您的示例中發佈所需的輸出。 – Armali

回答

0

我認爲你的問題是你使用greedy表達式.*

嘗試使用非貪婪.*?

+0

我不使用貪婪的表達式。他們在我的程序選項中被禁用。試過了。 – user1483658

+0

但你沒有發佈。無論如何,你的正則表達式肯定不會用於貪婪。 – Bohemian

0

更換所有.*我會親自出來替換引號,直到不再有任何引號替換出來解決這個問題。真的沒有辦法來處理這一個正則表達式替換,你需要做的是一樣的東西:

僞代碼:

html="... from your post ..."; 
do{ 
newhtml=html 
newhtml=replace(
     '/<div class="quote-container">.*<div class="quote-block">.*</div>.*</div>/s', 
     '', 
     newhtml 
    ) 
} while(newhtml!=html) 
html=newhtml 

這將處理嵌套引號的所有方式。

+0

將報價替換出來,直到不再有任何報價發送郵件消息,因爲它們位於引號之間。除此之外,我需要一個正則表達式,而不是像這樣的代碼。不管怎麼說,還是要謝謝你。 – user1483658

0

正則表達式是操作嵌套結構的糟糕選擇。我會爲這個問題寫一個特定的解析器(一個簡單的基於堆棧的解析器就足夠了)。