2017-11-23 4 views
0

私はmarkdown(HTMLから生成された)を取って、書式設定のためにHTML内にあった余分な改行を取り除こうとしています。私はhttps://regex101.com/r/dEhyN3/1の正規表現の実際の例を持っていますが、それをPHPに変換すると機能しません。なぜそれを理解するのに苦労しています。正規表現の縮約改行がPHPに翻訳されていません

public function squashEmptyLineBreaks(string $markdown) : string 
{ 
    return preg_replace('/\n{2,}/', '\n\n', $markdown); 
} 

試験:

/** @test */ 
    public function verifySquashEmptyLineBreaks() 
    { 
     $original = <<<EOF 
**Language** 

- Added four languages: Italian, Portuguese (Brazil), Spanish (Mexico) and Chinese (Traditional) 





**Bug fixes** 


- Fixed camera jittering for passenger sitting on the back of a motorcycle with sidecar 
EOF; 
     $expected = <<<EOF 
**Language** 

- Added four languages: Italian, Portuguese (Brazil), Spanish (Mexico) and Chinese (Traditional) 

**Bug fixes** 

- Fixed camera jittering for passenger sitting on the back of a motorcycle with sidecar 
EOF; 

     $this->assertEquals($expected, $this->parsesMarkdown->headersNeverAtEndOfLine($original)); 
    } 

このテストが失敗し続け、出力は未修飾です。 私は狂っているのですか、何か見落としていますか?

+2

'\ n \ n'は二重改行ではありません。 cf. http://php.net/string – Dormilich

+1

[余分な行の戻り値を取り除く]の可能な複製(https://stackoverflow.com/questions/728640/remove-excessive-line-returns) – ctwheels

答えて

1

単一引用符で囲まれた文字列では、\nなどのシーケンスは処理されません。代わりに二重引用符を使用してください。

public function squashEmptyLineBreaks(string $markdown) : string 
{ 
    return preg_replace("/\n{2,}/", "\n\n", $markdown); 
} 
+0

残念ながら、これで問題は解決されません。 – Webnet

+0

私のために働きます - [https://3v4l.org/2QLqD](https://3v4l.org/2QLqD) –

+0

はい、あなたが正しく、テストアサーションに問題がありました。 – Webnet

関連する問題