PHP регулярное выражение разделено на @. *?> - PullRequest
0 голосов
/ 28 января 2012

Я создал простой шаблонизатор / анализатор контента, где вы можете указать, где блоки текста должны быть размещены на конечной странице вывода.«Разметка», на которой я остановился, - это что-то вроде @blockname> в отдельной строке.Таким образом, чтобы поместить блок текста в тело, вы должны начать текст с @body>.Имя блока может быть любым, что вы хотите использовать, но оно не может содержать пробелов или разрывов строк.

Все работает нормально, за исключением случаев, когда в текст встроена текстовая строка типа @body>.Он также разбивается на встроенный текст.Это кажется очень простым, я просто хочу сопоставить строку, начинающуюся с @, за которой следуют любые непробельные символы и заканчивающиеся> в конце строки.Моя команда, которая сейчас работает, почти работает:

preg_split('/@([^\s].*?[^>])>/', $tpl, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

Кажется, я должен просто использовать ^ @ ([^ \ s]. *? [^>])> $, Но этоне работает вообще.Я чувствую, что упускаю что-то простое.Я попробовал несколько модификаторов в конце, но безрезультатно.

Пример текста для разбора:

@css>
.example {font-weight:bold;}

@js>
function example() {
    alert('example');
}

@body>
This is some sample @body> text to show

В идеале разделение регулярных выражений вернулось бы:*

1 Ответ

3 голосов
/ 28 января 2012

Я просто хочу сопоставить строку, начинающуюся с @, за которой следуют любые непробельные символы и заканчивающиеся> в конце строки.

Это можно сделать с помощью:

"/^@(\\S+)>$/m"

С цитированием PHP.Возможно, вам не хватало переключателя /m, который ^ / $ соответствует началу / концу строк, а не только строк.

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