2012-05-31 91 views
0

我試圖改變Markdown的默認行爲,其中單行換行是而不是轉換爲<br />Ruby gsub到PHP。更改降價行爲

我發現github flavored 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); 

從紅寶石到PHP轉換任何幫助將是高度讚賞。

PS。沒有必要在一般這裏的行爲的討論,請參閱元問題should the markdown renderer treat a single line break as br

回答

0

你缺少兩樣東西在你試着翻譯的Ruby代碼:

  1. 內正則表達式是一個Ruby塊內 - gsub! calls it once for every match of its regex parameter,比賽通過爲x。請注意,外部正則表達式是多行的(正如最終的m所示)。
  2. 內部正則表達式在匹配換行符之前插入兩個空格 - the Markdown processor then converts these to <br /> tags。你的正則表達式只是用它自己替換它的匹配。
+0

謝謝你的答案。我所追求的實際上是一個與do | X |相當的PHP部分。我可以找到一個可以執行相同技巧的PHP函數嗎? –

+1

@PeterJensen:在這個特定的情況下,這個塊只是一個迭代所有匹配的優雅方式,所以如果PHP有一個函數可以從正則表達式創建一個捕獲數組,那麼你可以在循環中使用它,並且應該得到類似的結果。儘管如此,我無法幫助你,因爲我不知道任何PHP ... – kopischke

0

經過進一步的研究,我發現這preg_replace函數是PHP相當於最有效的Ruby代碼:

preg_replace("/^(\w[^\r\n]*)(?=\r?\n\w.*$)/m", "\\1 ", $text);