如何通过 preg_replace 将 bbcode 替换为标签 HTML?
How to replace bbcode to tags HTML via preg_replace?
我在页面上有 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></ol>',
'<li></li>'
);
$text = preg_replace($advanced_bbcode, $advanced_html,$text);
$advanced_bbcode = array(
'#\[list=[0-9]+\](.+)\[\/list\]#i',
'#\[\*\](.+)\[\/\*\]#i'
);
$advanced_html = array(
'<ol></ol>',
'<li></li>'
);
$text = preg_replace($advanced_bbcode, $advanced_html, $text);
您需要稍微调整一下正则表达式(添加 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></ol>',
'<li></li>'
);
$text = preg_replace($advanced_bbcode, $advanced_html, $str);
echo $text;
?>
输出:
<ol>
<li>Камиль </li>
<li>Хисматуллин </li>
<li>живет в Урюпинске </li>
</ol>
我在页面上有 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></ol>',
'<li></li>'
);
$text = preg_replace($advanced_bbcode, $advanced_html,$text);
$advanced_bbcode = array(
'#\[list=[0-9]+\](.+)\[\/list\]#i',
'#\[\*\](.+)\[\/\*\]#i'
);
$advanced_html = array(
'<ol></ol>',
'<li></li>'
);
$text = preg_replace($advanced_bbcode, $advanced_html, $text);
您需要稍微调整一下正则表达式(添加 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></ol>',
'<li></li>'
);
$text = preg_replace($advanced_bbcode, $advanced_html, $str);
echo $text;
?>
输出:
<ol>
<li>Камиль </li>
<li>Хисматуллин </li>
<li>живет в Урюпинске </li>
</ol>