2013-08-26 79 views
2

我有串在PHP解析問題解析。我正在嘗試創建自己的模板解析器(用於我的學習目的)。我決定將網址設置爲{url:abc/def},因此將顯示爲http://www.domain.com/abc/def。我已經使用str_replace函數嘗試,但在這種情況下它不會後,因爲工作的價值「:」可以是任何東西。爆炸的字符串也不會爲工作「:」也可以出現在HTML文件中的文本。我認爲這隻能通過正則表達式來完成,所以建議我一些很好的正則表達式也讓我知道,如果這可以通過任何其他方法來實現。模板字符串在PHP

其他要注意的事項。

  1. 由於它用於模板解析,模板可以有多個 網址。
  2. 的url不會有任何查詢字符串,但我將不勝感激 如果解決方案還支持他們。
+0

如果內容可能是「什麼」,這不是*定期*和沒有很好的利用了*正則表達式*。你想要的是一個合適的*解析器*。看看https://github.com/fabpot/Twig一個像樣的語法分析器的體面的模板語言。我甚至建議你使用並延伸Twig來滿足你的需求,而不是重新發明輪子。 – deceze

+0

我已經提到,我正在爲我的學習目的而構建它。我知道有很好的模板引擎,比如smarty和其他。此外,網址值可以是任何東西,但模式保持不變,所以我認爲這可以通過使用正則表達式來實現。 –

+0

['preg_replace_callback()'](http://php.net/preg_replace_callback)是你的朋友。 –

回答

4

學習之用,則:

preg_replace('/\{url:([^\}]*)\}/', $base_url.'$1', $string); 

而正則表達式

  1. \{url: <的解釋 - 找到這個文本
  2. [^\}]* < - 這意味着「任何字符,但一個}發生的歷史0次或多次
  3. ([^\}]*) < - 通過將其插圖中()我們可以在以後引用它(見'$1'
  4. \} < - 收盤}

只要你學習:看看 http://www.regular-expressions.info/有關正則表達式的更多信息,請參閱 。他們是相當真棒真:d

+0

謝謝。像魅力一樣工作:) –