我在页面上有bbcodes:
[list=1]
[*]Камиль [/*]
[*]Хисматуллин [/*]
[*]живет в настоящий [/*]
[/list]
如何将这些bbcode替换为HTML标记:
<ul>
<li></li>
<li></li>
<li></li>
</ul>
我尝试了正则表达式:
$advanced_bbcode = array(
'#\[list=([0-9]?)](.+)\[/list]#Usi',
'#\[*](.+)\[/*]#Usi'
);
$advanced_html = array(
'<ol>$1</ol>',
'<li>$1</li>'
);
$text = preg_replace($advanced_bbcode, $advanced_html,$text);
答案 0 :(得分:2)
$advanced_bbcode = array(
'#\[list=[0-9]+\](.+)\[\/list\]#i',
'#\[\*\](.+)\[\/\*\]#i'
);
$advanced_html = array(
'<ol>$1</ol>',
'<li>$1</li>'
);
$text = preg_replace($advanced_bbcode, $advanced_html, $text);
答案 1 :(得分:1)
您需要稍微调整正则表达式(添加Singleline
内联(?s)
选项,该选项可以与不区分大小写的(?i)
选项结合使用),其余的都很整齐。只有我不知道您是否需要<ol>
或<ul>
(您可以自行调整该部分)。这是我的解决方案(在TutorialsPoint上测试):
<?php
$str = "[list=1]\n[*]Камиль [/*]\n[*]Хисматуллин [/*]\n[*]живет в Урюпинске [/*]\n[/list]";
$advanced_bbcode = array(
'/(?si)\\[list=\\d+\\](.*?)\\[\\/list\\]/',
'/(?si)\\[\\*\\](.*?)\\[\\/\\*\\]/'
);
$advanced_html = array(
'<ol>$1</ol>',
'<li>$1</li>'
);
$text = preg_replace($advanced_bbcode, $advanced_html, $str);
echo $text;
?>
输出:
<ol>
<li>Камиль </li>
<li>Хисматуллин </li>
<li>живет в Урюпинске </li>
</ol>