2012-02-17 3 views
1

У меня есть текст, как чтоИспользуя регулярное выражение для извлечения текста между тегами BBCode стиля

[СОДЕРЖАНИЕ] [РАЗДЕЛ] Это раздел C# 1 [/ РАЗДЕЛ] [РАЗДЕЛ] Это секция с # 2 [/ рАЗДЕЛ] [рАЗДЕЛ] Это раздел Е # 3 [/ рАЗДЕЛ]

и я стараюсь, чтобы соответствовать каждой секции, включая секцию тегов с этим выражением:

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

, но вышеуказанный код не работает, потому что [^ SECTION] просматривает текст между начальным и конечным тегами для любого символа, который не является S, E, C, T, I, O и N

Любая идея о том, как решить эту проблему ?

Я использую PHP для соответствия тегам и его содержимому с preg_match_all(); И мне нравится сопоставлять каждый раздел один за другим, а не все разделы сразу.

+0

Какой язык? –

ответ

3
\[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

Это не то, что мне нужно, потому что мне нужно, чтобы каждый раздел соответствовал друг другу. Ой, ты дал мне сопоставить все разделы как один. –

+0

Это регулярное выражение должно соответствовать каждому разделу по одному за раз. См. Мое редактирование для примера кода и результата. –

+0

Спасибо большое :) Это работает! :) –

0

Попробуйте с этим:

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

+0

Какая разница с ответом Колинка? Опять же, что соответствует всему содержимому от первого открытия тега до последнего открывающего тега как одно совпадение –

+0

Колинк лучше. Я попробовал выражение с preg_match_all, и он дал мне 3 матча за ваши данные. – sudipto

Смежные вопросы