使用正则表达式在BBCode样式标记之间提取文本

时间:2012-02-17 15:33:00

标签: php regex preg-match-all

我有这样的文字

  

[内容] [部分]这是C#1部分[/ SECTION] [SECTION]这是C#2部分[/ SECTION] [SECTION]这是E#3部分[/ SECTION]

我尝试匹配每个部分,包括带有该表达式的section标签:

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

但上面的代码不起作用,因为[^ SECTION]在任何不是S,E,C,T,I,O和N的字符的开始和结束标签之间的文本中查找

关于如何解决这个问题的任何想法?

我使用PHP来匹配标签及其内容与preg_match_all();我喜欢逐个匹配每个部分,而不是同时匹配所有部分。

2 个答案:

答案 0 :(得分: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"
    }
} 

结果:

{{1}}

答案 1 :(得分:0)

试试这个:

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