0

我正在尝试更改Markdown的默认行为,其中单个换行符转换为<br />.

我发现github 风格的 markdown可以做到这一点,但是我很难将 rube gsub 函数转换为 PHP 中的类似函数。

Ruby 代码如下所示:

text.gsub!(/(\A|^$\n)(^\w[^\n]*\n)(^\w[^\n]*$)+/m) do |x|
   x.gsub(/^(.+)$/, "\\1  ")
end

但即使我在 PHP 中尝试这种简单的方法,我也看不出有什么区别

$text = preg_replace("/^(.+)$/", "\\1", $text);
$text = Markdown($text);

任何从 Ruby 到 PHP 转换的帮助将不胜感激。

PS。此处无需讨论一般行为,请参阅元问题如果降价渲染器将单个换行符视为 br

4

2 回答 2

0

您在尝试翻译 Ruby 代码时遗漏了两件事:

  1. 内部的正则表达式在一个 Ruby 块内 -gsub!为其正则表达式参数的每次匹配调用一次,匹配传递为x。请注意,外部正则表达式是多行的(由 final 表示m)。
  2. 内部正则表达式在匹配的换行符之前插入两个空格 - Markdown 处理器然后将它们转换为<br />tags。您的正则表达式只是将其匹配替换为 ... 本身。
于 2012-05-31T17:29:59.123 回答
0

经过进一步研究,我发现这个 preg_replace 是最有效的 PHP 等效于 ruby​​ 代码:

preg_replace( "/^(\w[^\r\n]*)(?=\r?\n\w.*$)/m", "\\1  ", $text );
于 2012-06-02T05:10:45.263 回答