簡體   English   中英

刪除換行符和所有后續空格的正則表達式是什么

[英]What would be the regex to remove line breaks and all following spaces

我想要實現的是斷言兩個字符串相等而忽略格式

        $expected =
            '<div class="input select">
                <label for="countries">User Country</label>
                <select name="countries" id="countries">
                    <option value="">Select a country</option>
                    <option value="ger">Germany</option>
                    <option value="fra">France</option>
                    <option value="rus" selected="selected">Russia</option>
                </select>
            </div>';
       $actual = '<div class="input select"><label for="countries">User Country</label><select name="countries" id="countries"><option value="">Select a country</option><option value="ger">Germany</option><option value="fra">France</option><option value="rus" selected="selected">Russia</option></select></div>';
       $this->assertTextEquals($expected, $actual);

到目前為止,我做到了:

    public function assertTextEquals($expected, $actual)
    {
        $actualNoLineBreaks = preg_replace("/\r|\n/", "", $actual);
        $actualNoLongSpaces = preg_replace('!\s+!', ' ', $actualNoLineBreaks);
        $expectedNoLineBreaks = preg_replace("/\r|\n/", "", $expected);
        $expectedNoLongSpaces = preg_replace('!\s+!', ' ', $expectedNoLineBreaks);
        TestCase::assertEquals($expectedNoLongSpaces, $actualNoLongSpaces);
    }

但問題是換行符所在的位置仍然存在空格,例如: select"> <label

那么去除換行符和所有后續空格(直到第一個非空格字符)的正則表達式是什么?

當然,我可以去掉兩個字符串中的所有空格,但這會使錯誤消息難以閱讀,我正在尋找一個優雅的解決方案。

檢查這個:

(( *\n+|\A) *)

\A是刪除字符串開頭的任何空格。

演示

您可以使用

trim(preg_replace('~\h*\R\s*~', '', $expected))

請參閱PHP 演示正則表達式演示 詳情

  • \h* - 零個或多個水平空格(制表符、空格...)
  • \R - 任何換行字符(序列)
  • \s* - 以及任何零個或多個空白字符。

trim() function 刪除前導/尾隨空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM