2015-04-03 58 views
0

我在頁面bbcodes:如何通過preg_replace將bbcode替換爲標記HTML?

[list=1] 
[*]Камиль [/*] 
[*]Хисматуллин [/*] 
[*]живет в настоящий [/*] 
[/list] 

我怎麼能代替這些bbcodes 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); 

回答

1

您需要調整正則表達式(添加Singleline內聯(?s)選項th在可以結合大小寫不敏感(?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> 
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);