删除换行符和后面所有空格的正则表达式是什么



我想要实现的是断言两个字符串相等,忽略格式化

$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

那么,去掉换行符和后面所有空格(直到第一个非空格字符)的正则表达式是什么呢?

当然,我可以从两个字符串中去掉所有空格,但这会使错误消息难以阅读,我正在寻找一个优雅的解决方案。

您可以使用

trim(preg_replace('~h*Rs*~', '', $expected))

请参阅PHP演示和regex演示详细信息

  • h*-零个或多个水平空白(制表符、空格…)
  • R-任意换行符字符(序列)
  • s*-和任何零个或多个空白字符

trim()函数删除前导/尾随空白。

检查此项:

(( *n+|A) *)

A将删除字符串开头的任何空格。

演示

最新更新