2012-09-15 113 views
2

任何人都可以幫我解決這個問題嗎?preg_replace for [list] [*] [/ list]

我使用的BBcode爲我的網站,但在文本編輯器中我發現一個問題:

的UI

[list] 
[*]Lorem Ipsum 
[/list] 

[list=1] 
[*]Lorem Ispum 
[/list] 

我用這腳本:

$filter = preg_replace("#[[]list[]](.*)[[]/list[]]#","<ul>$1</ul>",$filter); 
$filter = preg_replace("#[[]list=([^0-9][]](.*)[[]/list[]]#","<ol start=$1>$2</ul>",$filter); 
$filter = preg_replace("#[*](.*)#","<li>$1</li>",$filter); 

我得到的問題,此腳本 - 它不能使用,因爲腳本found symbol after [list],它不能執行下一條語句

preg_replace("#[[]list[]] (.*) [[]/list[]]#","<ul>$1</ul>",$filter);  
[list] 
[*] Lorem Ipsum --- Stuck In Long Space 
[/list] 
+0

請在[字符類]讀了(http://www.regular-expressions.info/charclass.html)。還可以使用'#s'修飾符來使'。*'匹配換行符。但也考慮搜索現成的bbcode /無論轉換器,因爲你的編碼嘗試有更多的缺陷。 – mario

+0

您可能還想看看BBCode模塊:http://php.net/manual/en/book.bbcode.php –

回答

1

猜你不需要它了,而是讓回答:

  • 括號是正則表達式中的特殊字符。當你確實需要一個括號時,你必須使用反斜槓來轉義它。星星(星號)也是如此。
  • 您可以通過s修改器分析多行
  • 您將需要U(不確定)修飾符,否則代碼中的多個塊將不起作用。不合理的意思是,匹配的開始和結束將在最近的環境中尋找,貪婪意味着代理將搜索最長的距離。

我想有我改變的東西:

$filter = preg_replace("#\[list\](.*)\[/list\]#sU","<ul>$1</ul>",$filter); 
$filter = preg_replace("#\[list=([0-9+])\](.*)\[/list\]#sU","<ol start=\"$1\">$2</ul>",$filter); 
$filter = preg_replace("#\[\*\](.*)#","<li>$1</li>",$filter); 
相關問題