как получить строку между [LOOP] ... [/ LOOP] - PullRequest
1 голос
/ 13 апреля 2009

как получить строку между [LOOP] ... [/ LOOP] я пытаюсь это, но не работает

$gloop = preg_replace('/\[LOOP\]([^\[]*)\[\/LOOP\]/', '\\1', $var);

... строка:

'<tr>
    [LOOP]<th scope="col">%Gdata_All%</th>[/LOOP]
</tr>'

но я бы добавил строку в [LOOP] ... [/ LOOP]

Ответы [ 2 ]

9 голосов
/ 13 апреля 2009

Сначала я хотел бы сказать, вы создаете свою собственную библиотеку шаблонов? Вокруг есть несколько зрелых, таких как Smarty , которые должны соответствовать вашим требованиям. Джефф Этвуд также хорошо читает эту статью: « Не изобретай колесо, если только ты не планируешь узнать больше о колесах »

Если вы хотите развернуть свое собственное решение, тогда это хорошо, вот несколько советов.

1009 * BBCode * Этот метод основан на установке расширения BBCode с PHP, он является нативным и не использует механизм регулярных выражений (медленно). Это решение будет , вероятно, будет самым быстрым. Вы можете преобразовать парсер BBCode [LOOP]<td><?php print $row->title; ?></td>[/LOOP] в <?php foreach($result as $row): ?><td><?php print $row->title; ?></td><?php endforeach; ?> Просмотрите аргументы BBCode, чтобы узнать о передаче переменных в синтаксис [LOOP]. Вы можете посмотреть еще несколько примеров на странице метода bbcode_create . Регулярные выражения


Они немного медленнее, но включены по умолчанию во всех установках PHP.

Кредиты, чтобы получить Gumbo для этого регулярного выражения (Вы должны проголосовать за него).

/\[LOOP]((?:[^[]+|\[(?=\/LOOP]))*)\[\/LOOP]/

Затем вы можете использовать его следующим образом.

if (preg_match('%\[LOOP\]((?:[^[]+|\[(?=/LOOP\]))*)\[/LOOP\]%i', $subject, $result)) {
    # Successful match
    # You can access the content using $result[1];
} else {
    # Match attempt failed
}

-Mathew

1 голос
/ 13 апреля 2009

Я бы использовал это регулярное выражение:

/\[LOOP]((?:[^[]+|\[(?=\/LOOP]))*)\[\/LOOP]/

Соответствует последовательности любого символа, кроме [ ([^[]+) или [, за которым не следует /LOOP] (\[(?!\/LOOP]), (?!expr) - отрицательное прогнозное утверждение) между [LOOP] и [/LOOP]; окружающее (?:expr) является не захватывающей группировкой.

Но, безусловно, было бы лучше, если бы вы использовали реальный анализатор для обнаружения искаженного кода, как Pixel Developer уже указывал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...