2013-07-10 17 views
2

我有一個這樣的字符串之間的文本:正則表達式:發現兩名身份不明的標籤

<!NAME!>Admin : <!NAME!><!MSG!>Hello Guys<!MSG!><!ADD-ACC!>BOSS<!ADD-ACC!> 

我想寫兩個相同的標籤之間提取文本像

<!NAME!>Admin : <!NAME!> 
<!MSG!>Hello Guys<!MSG!> 
<!ADD-ACC!>BOSS<!ADD-ACC!> 

所以我寫了一個正則表達式模式此正則表達式:

<!.*!>.*<!.*!> 

但它給了我這個結果

<!NAME!>Admin : <!NAME!><!MSG!>Hello Guys<!MSG!><!ADD-ACC!>BOSS<!ADD-ACC!> 

我明白爲什麼這樣做,這是因爲

<!NAME!> and <!ADD-ACC!> follows the regex pattern i am using. 

於是我就在正則表達式

<!XXX!>.*<!XXX!> where XXX is the same text between tags so that REGEX could find and extract those tags from text like how i want it to be done. 

回答

4

思考的東西一樣,你可以使用反向引用

(<!.*?!>).*?\1 

.*是貪婪的量詞其作爲儘可能

.*?是一個懶惰的量詞相匹配的儘可能

(<!.*?!>)將捕獲標籤的場小組賽1

我們可以使用\1參照組1中的捕獲值。因此,\1指的是第一個c被抓的團體價值

+0

哇,真的有效,非常感謝你 – BOSS