如何在ruby 1.8中编写正则表达式(?<! - ...)。 (重新实现wpautop功能) - >

时间:2010-12-06 04:10:58

标签: ruby regex wordpress

我正在ruby中写一个博客档案转换器。为了将wordpress帖子内容转换为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语法。

所以我认为我有两种方式:

  1. 使用ruby时添加依赖的'oniguruma'&lt; 1.9.0
  2. 用旧语法重写/(?<!<br \/>)\s*\n/
  3. 哪种方式更好?以及如何重写此正则表达式?

2 个答案:

答案 0 :(得分:3)

如果不能正常工作,你可以这样断言(注意! - 未经测试 - 我没有1.8):

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

答案 1 :(得分:3)

试试这个.gsub!(%r|(<br />)?\s*\n|, "<br />\n")