Я бы сделал это с 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);