我正在尝试改进处理从字符串中清理 BBCode 的遗留 PHP 代码,目前正面临列表问题。
列表的当前解决方案执行以下操作:
...
$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]
标记以及[*]
它们是否在列表中?