我正在用ruby编写一个博客存档转换器。为了将wordpress的post内容转换成html格式,我必须实现wordpress的wpautop()函数。
原始wpautop()函数:http://pastebin.com/BzV8bXxQ
我的ruby实现:https://github.com/chloerei/blog_converter/blob/master/lib/blog_converter/adaptor/wordpress.rb,请参见Wordpress#wpautop_filter
它在ruby1.9.2中运行良好,在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没有新的regexp引擎“Oniguruma”,它不支持新的regexp语法。
所以我想我有两个办法:
使用ruby用旧语法重写
/(?<!<br \/>)\s*\n/
哪种方式更好?如何重写这个regexp?
最佳答案
如果不起作用,向前看,你可以这样断言(注意!-未测试-我没有1.8):
string.gsub!(%r|(<br />)?\s*\n|, "<br />\n")
关于ruby - 如何在ruby1.8中编写正则表达式(?<!…)。 (实现wpautop函数),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4363142/