2010-12-06 22 views
1

我正在用ruby寫博客歸檔轉換器。爲了將wordpress文章內容轉換爲html格式,我必須實現wordpress的wpautop()函數。如何在ruby1.8中重寫正則表達式(?<!...)。(重新實現wpautop函數)

原始wpautop()函數:http://pastebin.com/BzV8bXxQ

我的紅寶石實現:https://github.com/chloerei/blog_converter/blob/master/lib/blog_converter/adaptor/wordpress.rb,看Wordpress#wpautop_filter

它做工精細的ruby1.9.2,BU在1.8.7,它拋出一個錯誤

blog_converter/lib/blog_converter/adaptor/wordpress.rb:147: undefined (?...) sequence: /(?<!<br \/>)\s*\n/ 

來源

// In php 
$pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks 

# In ruby 
string.gsub!(%r|(?<!<br />)\s*\n|, "<br />\n") # optionally make line breaks 

經過一番搜索之後,我發現ruby1.8.7沒有新的正則表達式引擎'Oniguruma',它不支持新的正則表達式語法。

所以我想我有兩個辦法:

  1. 添加依賴 'oniguruma' 舊語法使用Ruby 1.9.0 <
  2. 重寫/(?<!<br \/>)\s*\n/

哪種方式更好?以及如何重寫這個正則表達式?

回答

3

如果沒有作品先行斷言,你可以像這樣(注意 - 沒有經過測試,我還沒有1.8!):

string.gsub!(%r|(<br />)?\s*\n|, "<br />\n") 
+0

謝謝你,把我的簡單的單元測試。 – Rei 2010-12-06 06:30:23

3

試試這個.gsub!(%r|(<br />)?\s*\n|, "<br />\n")

+0

謝謝,通過我簡單的單元測試。 – Rei 2010-12-06 06:29:45