2012-02-17 87 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