Я разбираю BBCode с помощью regex
, чтобы заменить его на HTML. Я застрял прямо сейчас из-за разбора тегов [code]
.Пропустить парсинг BBCode внутри тега CODE
В основном, когда вы делаете [code][b]this is bb[/b] [u]code in[/u] [i]code[/i][/code]
оно не должно заменить [b]
, [u]
, [i]
и аналогичные метки, которые находятся внутри [code]
тега.
К сожалению, с помощью preg_replace:
$this->_text = preg_replace('/\[i](.+?)\[\/i]/i', '<em>\1</em>', $this->_text);
$this->_text = preg_replace('/\[code](.+?)\[\/code]]/i', '<code>\1</code>', $this->_text);
приведет заменяющий их всех, и код внутри тега [code]
станет HTML форматированию.
Есть ли какая-нибудь работа для этого? Мне нужны идеи. Я думал об ускорении символов [
, ]
в [code]
перед разоблачением остальных, но эта идея звучит глупо.
Вы не можете анализировать HTML или BBCode с регулярными выражениями, потому что HTML и BBCode не являются примерами «обычного языка». Вам нужна соответствующая библиотека синтаксического анализа, которая предоставляет структуру документа вашей программе, где вы сможете работать с ней. – Dai
@Dai Если бы это был HTML, я бы наверняка использовал 'DOM'. Для основ BBCode я хочу использовать регулярное выражение. Я не вижу смысла использовать любые библиотеки для разбора кода, потому что это слишком много (и регулярное выражение может достичь того, что я хочу), по крайней мере, в моем случае. – Lucas
Ваш «обходной путь» не глупый, я не вижу другого способа сделать это, кроме полного парсера, как предположил @Dai - какой ИМХО является «правильным путем (TM)». – svoop