2011-09-25 28 views
0

我想添加一個新的bbcode到我的phpfusion應用程序。我正在使用preg_replace。下面的代碼:preg_replace捕獲組檢查

$text = preg_replace(
    "#\[gameimg(float:(left|center|right))?\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/gameimg\]#sie", 
    "'<span style=\"display: block; max-width: 350px; margin: 0 0 5px 5px; $1\"><img src=\"' 
     . (strlen('$3') > 0 ? '$3' : BASEDIR.GAMESDIR) 
     . '$5$6\" alt=\"$5$6\" style=\"border:0px; max-width: 350px;\" /></span>'", 
    $text 
); 

如果我提供一個絕對URL(EX [gameimg] HTTP://localhost/dirname/file.jpg [/ gameimg])一切工作正常,圖像顯示爲預期。但是,如果我使用相對url([gameimg] dirname/file.jpg [/ gameimg])省略了protokol和hostname,我希望將basedir.gamedir常量追加到給定的url,但它根本不起作用,它會打印出來原始的bbcode沒有任何替換,而不是圖像。我究竟做錯了什麼?

回答

3

有兩件事情在這裏:

  • 這是一個巨大的preg_replace電話。也許你可以將這個問題分解成更小的部分,以便更容易理解/維護?
  • 您正在使用「忽略大小寫」修飾符(i),但您擁有諸如(jpg|JPG)之類的內容。這是多餘的。
  • 你的問題問爲什麼[gameimg]標籤沒有http://..不匹配。那麼這是因爲你的正則表達式需要((http|ftp|https|ftps)://)。你應該讓這部分可選加入了?,像這樣:

    ((http|ftp|https|ftps)://)?

+0

沒錯林傻在凌晨2點......應該是可選的。謝謝! – posthy