2013-01-08 101 views
0

我在將文本轉換爲列表時遇到了一些麻煩。的情況是,我得到這樣從數據庫中下面的文字:將文本轉換爲列表

"Hello, my name is michael, my hobbys are: 
- computers 
- guitar 
and some more blabla " 

不,我想上市點(計算機&吉他在這種情況下)轉變成一個無序的HTML列表,所以resulst應該是這樣的:

"Hello, my name is michael, my hobbys are: 
<ul> 
<li>computers<li> 
<li>guitar</li> 
</ul> 
and some more blabla ". 

我認爲最好的解決方案是通過正則表達式來做到這一點,但我的知識並不足以實現這一點。我嘗試通過替換所有/\n- /寬度a <li>標籤,它工作。但是,我如何獲得關閉</li>,更令我困惑的是,我如何獲得<ul>標籤?

非常感謝您的任何建議。

回答

5

你的語法看起來幾乎相同Markdown,一個簡單的標記語言。唯一的區別是空白的一點:

Hello, my name is Michael, my hobbies are: 

- Computers 
- Guitar 

and some more blabla 

它轉換成這樣:

<p>Hello, my name is Michael, my hobbies are:</p> 

<ul> 
    <li>Computers</li> 
    <li>Guitar</li> 
</ul> 

<p>and some more blabla</p> 

有幾個PHP Markdown項目,我想你會發現有用的。

+0

謝謝你的回答,但是Ynhockey發佈的方式似乎對我來說更快。如果我找到時間,我會看看降價,看起來很有趣。 –

+0

@MichaelKunst:微型優化不會對你有很大的幫助。生成一次HTML並緩存它以備後用。在這裏重新發明輪子確實沒有用處。 – Blender

-1

不幸的是,這將是最好做的正則表達式

+0

不,在這種情況下,最初並不是,簡單的逐行解析就像@ Ynhockey的答案中提到的更適合 – SirDarius

0

有很多方法可以做到這一點,包括正則表達式,但在你的具體情況下,explode()函數應該足夠了。你可以這樣做:

$array = explode("\n", $string); 

現在你的$陣列將有「你好,我的名字是邁克爾,我hobbys是:」在第一個插槽中,「 - 電腦」中的第二等

然後走在陣列上,併爲開頭的每個元素「 - 」,把它變成<李>元素< /李>

這是做的非常香草的方式,但它應該是高效的和不需要使用正則表達式。