2013-11-24 93 views
0

目前我有一個自定義的URL語法,我用來保存來自輸入的網址。然後,我使用輸出緩衝在執行結束時獲取整個文檔,並用錨標記替換url語法。但我也有一個圖像語法,可將圖像鏈接從輸入轉換爲圖像標籤,以及將youtube鏈接轉換爲嵌入式視頻的youtube標籤。替代一堆preg_replace

長話短說

[url]http://www.somesite.com/[my site]
成爲
<a href='http://www.somesite.com/'>my site</a>

[img]http://www.somesite.com/image.jpg[/img]
成爲
<img src='http://www.somesite.com/image.jpg'/>

你明白了吧。因爲我知道preg_replace已知會影響性能,並在大約10,000個字符長的字符串上運行多次(
(我網站的平均html文檔長度))確實不太好。我也想實現更多網站的自動嵌入,並且使用我現有的算法將意味着我將不得不爲每個網站添加一個新的preg_replace,這很荒謬。我正在尋找如何實現此功能的建議。謝謝!

編輯:

我覺得我沒表達自己清楚。我正在尋找一種方法將所有組件與文檔字符串的單個分析進行匹配。例如,當你去購買雜貨時,你不要去拿西紅柿,把它們帶回家,然後再去拿黃瓜。你同時做所有的事情,這就是我要找的。謝謝!

+0

一個整體項目,這可能是有用的:http://www.php.net/manual/en/book。 bbcode.php –

+0

@tereško不bbcode工作方式與我的工作一樣? –

回答

1

好的,你想跳過使用preg_ *(雖然它是obviuos的選擇),因爲性能方面的考慮。

如果這已成爲一個問題,那麼您可能需要更換更多(1 *)的替換策略。

長話短說

[URL] http://www.somesite.com/ [我的網站]

是沒有這樣一個小故事: [我的網站]只能如果有[url]的先前知識,則需要格式化,並且之間(可變長度)之間的所有內容必須連接在<a href=""之間。 [我的網站]也是可變長度,必須在></a>之間提取並連接。

這一切都meeans是,除了使用正則表達式,你可能在你的字符串,這意味着多個secuential通過這可能與另一個或其他內容的干擾做多個操作str_replace)。

我長話短說...

這是正則表達式是,在您的處置使用這些完美的事情的工具。如果你開始有,因爲文件長度的性能問題,然後再考慮其他的替代品

  • 分手的內容和作品服務的,一拉第1頁,第2頁式
  • 如果您的內容不需要進一步編輯,保存格式化,並讓它從當前的託管提供商
  • 改變當前格式內容被保存在直通轉義輸出
  • 升級(1 *)。哦啦啦!這可能是本身
  • (別人可能需要一些更多的經驗幫腔)
+0

我真正意識到的是,我不需要搜索整個文檔,只有用戶輸入保存在數據庫和東西......這些時刻之一,只是讓你覺得「我是否智力遲鈍?」..感謝您的答案! –

0

從php.net約preg_replace函數:

如果兩個圖案和替換參數是數組,每個圖案 將由置換對方來代替。

所以:

preg_replace(array('pattern_for_url', 'pattern_for_img'), array('replace_for_url', 'replace_for_img', $document_content)); 

我想這是你想要的。

+0

那麼,這將只是節省我一些打字,但它仍然會運行preg_replace多次:/ –

+0

爲什麼你仍然會運行preg_replace多次?您可以在一個preg中匹配所有組件。 – Clickbeetle