2012-02-17 52 views
1

我有這樣的正則表達式中的BBCode風格的標記之間,以提取文本

[CONTENT] [SECTION]這是部分C#1 [/ SECTION] [SECTION]這是一個文本的部分C#2 [/ SECTION] [SECTION]這是E部分#3/SECTION]

和我嘗試匹配各段,包括與該表達的區段標記:

\[SECTION\][^SECTION]+(SECTION\]) 

但上面的代碼確實不起作用,因爲[^ SECTION]正在查看任何非S,E,C,T,I,O和N字符的開始和結束標記之間的文本

有關如何解決該問題的任何想法?

我使用PHP來匹配標籤,它的內容與preg_match_all();我喜歡逐個匹配每個部分,而不是一次匹配所有部分。

+0

哪種語言? – 2012-02-17 15:34:31

回答

3
\[SECTION\](.*?)\[/SECTION\] 

我想這就是你想要的,獲得單個SECTION內容的文本?

?使得*很懶,所以它只會匹配到當前第一個[/SECTION]


例子:

$input = "[CONTENT][SECTION]This is the section C#1[/SECTION][SECTION]This is the section C#2[/SECTION][SECTION]This is the section E #3[/SECTION]"; 
var_dump(preg_match_all("(\[SECTION\](.*?)\[/SECTION\])",$input,$m),$m); 

結果:

int(3) 
array(2) { 
    [0]=>array(3) { 
     [0]=>string(43) "[SECTION]This is the section C#1[/SECTION]" 
     [1]=>string(43) "[SECTION]This is the section C#2[/SECTION]" 
     [2]=>string(43) "[SECTION]This is the section E #3[/SECTION]" 
    } 
    [1]=>array(3) { 
     [0]=> string(24) "This is the section C#1" 
     [1]=> string(24) "This is the section C#2" 
     [2]=> string(24) "This is the section E #3" 
    } 
} 
+0

這不是我所需要的,因爲我需要每個部分獨立匹配。你給我的所有部分都是一樣的。 – 2012-02-17 15:47:44

+0

這個正則表達式應該匹配每個部分,一次一個。查看我的編輯樣本代碼和結果。 – 2012-02-17 15:51:14

+0

非常感謝:)它的工作原理! :) – 2012-02-17 16:11:09

0

試試這個:

\[SECTION\].+?\[\/SECTION\]

+0

與Kolink答案有什麼不同?再次匹配從第一個開始標記到最後一個開始標記的所有內容作爲一個匹配 – 2012-02-17 15:50:42

+0

Kolink更好。我用preg_match_all嘗試了表達式,它給了我3個匹配你給定的數據。 – sudipto 2012-02-17 15:56:58

相關問題