最近,我在玩phpBB3中的BBCode相關的東西。當我追溯我的數據庫,帖子表和隨機帖子。我發現圖像標籤是這樣寫的[img:fcjsgy5j]。在每個帖子的[img:...]之間會生成8個隨機字符。在PHP中需要REGEX幫助。一個簡單的。幫幫我!
[img:fcjsgy5j]http://imageurl.jpg[/img]
我的問題是,如何才能讓使用的preg_replace()來代替隨機字符到這樣的..
<img src="http://imageurl.jpg">
最近,我在玩phpBB3中的BBCode相關的東西。當我追溯我的數據庫,帖子表和隨機帖子。我發現圖像標籤是這樣寫的[img:fcjsgy5j]。在每個帖子的[img:...]之間會生成8個隨機字符。在PHP中需要REGEX幫助。一個簡單的。幫幫我!
[img:fcjsgy5j]http://imageurl.jpg[/img]
我的問題是,如何才能讓使用的preg_replace()來代替隨機字符到這樣的..
<img src="http://imageurl.jpg">
$output = preg_replace("`\[img:.+?\](.*?)\[/img\]`i", '<img src="$1"/>', $input);
[
開頭的字符集。我們不希望那樣;我們要字面[
字符匹配,所以我們有一個\
.
逃脫它匹配任何字符+
意味着我們匹配1個或多個以前的事情(任何字符)?
使得以前量詞ungreedy(.+
會匹配一切,對字符串的盡頭,那不是我們想要的,我們希望它匹配儘可能少的...只是到下一個]
(.*?)
匹配之間的所有垃圾[img]
標籤。再次公佈。我們把()
放在它的周圍,使它成爲一組/
,但我更喜歡back-tick,因爲它很少出現在正則表達式的任何位置,因此我不需要轉義它。i
表示表達式將不區分大小寫。 (將匹配IMG,IMG,IMG等)$1
的替代是指回()
部分我們前面記...它基本上採用任何被匹配那裏,它撲通一聲入$1
[a-z]將會錯過5,最好使用簡單的。+ – generalhenry 2010-11-12 07:09:01
@generalhenry:'。+?'你的意思是......否則它很貪婪,會吞噬一切。 – mpen 2010-11-12 07:12:02
我一直認爲你必須在PHP正則表達式中使用分隔符。這段代碼是否真的在運行?我沒有安裝PHP,所以我無法檢查。 – 2010-11-12 07:16:15
試試這個代碼:
<?php
$search = array(
'\[img:.+?\](.*?)\[\/img\]\'
);
$replace = array(
'<img src="\\2">'
);
$result = preg_replace($search, $replace, $string);
}
?>
我用preg_replace函數的陣列形式,好讓你可以添加更多的搜索和未來的替代模式。我想你正在嘗試替換一些BBCODE標籤。網上有很多庫可以正確處理BBCODE。
編輯
你的'$ search'永遠不會匹配..你沒有處理隨機字符。還有,你回來了......從什麼?這不是一個函數AFAIK。 – mpen 2010-11-12 07:13:07
$result = preg_replace('%\[img:[^]]+\]([^[]+)\[/img\]%', '<img src="\1">', $subject);
,或作爲評論的正則表達式:
$result = preg_replace(
'%\[img: # match [img:
[^]]+ # match one or more non-] characters
\] # match ]
([^[]+) # match one or more non-[ characters
\[/img\] # match [/img]
%x',
'<img src="\1">', $subject);
[你不能解析與正則表達式BB代碼(HTTP://科雷-nordmann.de/blog/do_NOT_parse_using_regexp.html)。使用[BBCode Parser](http://de2.php.net/manual/en/book.bbcode.php)。 – Gordon 2010-11-12 08:04:53