Выражение RegEx, необходимое для тега BBCode - PullRequest
0 голосов
/ 16 марта 2012

Я конвертирую свой форум в phpBB, и они используют похожий тег BBCode, но один отличается.Чтобы цитировать на старом форуме, он был отформатирован как:

old: [quote = prattw] Мой текст здесь. [/ Quote]

new: [quote = "prattw"] Мой текстздесь. [/ quote]

Мне нужно регулярное выражение, которое будет добавлять кавычки вокруг имени пользователя в блоке BBCode.Большое спасибо!

1 Ответ

0 голосов
/ 16 марта 2012

Если предположить, что единственные допустимые символы для имен пользователей совпадают с \w, то есть [a-zA-Z0-9_] (в Python), то вы можете заменить \[quote=(\w+)\] на \[quote="\1"\].

Предостережения:

  • , если ваши имена пользователей могут содержать [], это может пойти ужасно неправильно.

    • Возможно, вы захотите попробовать не жадное сопоставление с любым символом, например\[quote=(.+?)\], но для [quote=Clan[FROZEN] Supahkillah] это даст совпадение Clan[Froze.
    • Жадная версия еще хуже.\[quote=(.+)\] слишком много совпадет с [quote=Alice][quote=Bob].

    Помните, что регулярные выражения не хороши при обработке вложенных структур .Возможно, вы захотите использовать подход синтаксического анализа вместо подхода регулярного выражения.(Для HTML это будет «использовать парсер XML» - для этого примера это будет «использовать парсер bbCode».)

  • По крайней мере, в Python, значение \w зависит от локали.Так что для русских \w будет соответствовать таким вещам, как Главное в новостях.

Я все еще думаю, что вы пытаетесь изобрести велосипед.Скорее всего, существует скрипт для автоматического преобразования вашего старого формата форума в phpBB - вам просто нужно его найти.

...