0

単一の改行が に変換されないMarkdownのデフォルトの動作を変更しようとしています。<br />

githubフレーバーのマークダウンがこれを行うことがわかりましたが、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。ここで一般的な動作について議論する必要はありません。マークダウン レンダラーが 1 つの改行を br として扱う必要がある場合は、メタの質問を参照してください。

4

2 に答える 2

0

さらに調査した結果、この preg_replace が Ruby コードに相当する最も効率的な PHP であることがわかりました。

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

Ruby コードを翻訳しようとして、次の 2 つの点が欠けています。

  1. 内側の正規表現は Ruby ブロック内にあります。gsub!正規表現パラメーター が一致するたびに 1 回呼び出され、一致は として渡されxます。外側の正規表現は複数行の正規表現であることに注意してください ( final で示されていmます)。
  2. 内側の正規表現は、一致した改行の前に 2 つのスペースを挿入します。Markdown プロセッサはこれらを<br />tagsに変換します。あなたの正規表現は、その一致を…自体に置き換えるだけです。
于 2012-05-31T17:29:59.123 に答える