Нужно регулярное выражение для поиска тегов grep - PullRequest
1 голос
/ 03 октября 2011

Мне нужно регулярное выражение для preg_replace, чтобы изменить:

[quote](content)[/quote] в <blockquote>(content)</blockquote>

+

[quote=(username)][/quote] в <blockquote>Post user: (username)</blockquote>

+

[quote=(username);(id)][/quote] в <blockquote>Post user: (username).<br/>ID: (id)</blockquote>

Конечно, (content), (username), (id) должны быть те, которые регулярное выражение будет grep Я много искал и не нашел хорошего выражения для этого действия. Итак, помогите мне, ребята, пожалуйста.

1 Ответ

2 голосов
/ 03 октября 2011

Я бы сделал это с 3-мя отдельными регулярными выражениями, поскольку это превратилось бы в гигантский беспорядок, если бы вы попытались поместить два условия в одно регулярное выражение.

preg_replace('#\[quote\](.+?)\[/quote\]#', '<blockquote>$1</blockquote>', $input);
preg_replace('#\[quote=(.+?)\]\[/quote\]#', '<blockquote>Post user: $1</blockquote>', $input);
preg_replace('#\[quote=(.+?);(.+?)\]\[/quote\]#', '<blockquote>Post user: $1.<br\>ID: $2</blockquote>', $input);

Конечно, это дословно. Похоже, что вы забыли о (содержании) во вторых двух примерах.

РЕДАКТИРОВАНИЕ: Если вы действительно хотите использовать только один вызов preg_replace, вы можете создать массивы, содержащие эти шаблоны и замены, как показано во втором примере здесь .

РЕДАКТИРОВАНИЕ 2: Поддерживает ли BBCode вложенные блоки кавычек? Если это так, это будет немного сложнее.

РЕДАКТИРОВАТЬ 3: Еще проще. Поскольку [/quote] всегда приводит к </blockquote>, вы можете пропустить всю эту ерунду группы захвата и просто заменить теги открытия и закрытия отдельно:

preg_replace('#\[quote\]#', '<blockquote>', $input);
preg_replace('#\[quote=(.+?)\]#', '<blockquote>Post user: $1>', $input);
preg_replace('#\[quote=(.+?);(.+?)\]#', '<blockquote>Post user: $1.<br\>ID: $2', $input);
preg_replace('#\[/quote\]#', '</blockquote>', $input);
...