Я пытаюсь улучшить устаревший код PHP, который занимается очисткой BBCode от строки, и в настоящее время столкнулся с проблемой со списками.
Текущее решение для списков делает следующее:
...
$search[] = sprintf('~\[%s\](.*)\[/%s\]~smUi', 'list', 'list');
$search[] = sprintf('~\[%s=(.*)\](.*)\[/%s\]~smUi', 'list', 'list');
$search[] = sprintf('~\[\%s\]~i', '*');
$replace[] = '$1';
$replace[] = '$2';
$replace[] = '';
...
return preg_replace($search, $replace, $string);
Это прекрасно работает, когда строка похожа на
[list]
[*]Item 1
[*]Item 2
[*]Item 3
[/list]
Но он также удалит [*]
, если его нет в списках, а также произойдет сбой с такими вещами, как:
[list]
[*][list]
[*]Item 1.1
[*]Item 1.2
[*]Item 1.3
[/list]
[*]Item 2
[*]Item 3
[/list]
Возможно ли использование RegExp только для удаления тегов [list]
или [list=1]
+ [/list]
вместе с [*]
, если они находятся в списках?