以下代码会产生意外结果:
$row = 'one //There are spaces here
two ';
$row = explode(PHP_EOL,$row);
$row = $row[0];
preg_match('/( +)$/',$row,$matches);
使用var_dump($matches);
时,输出为:
array(0) {
}
但是,它应该是这样的:
array(2) {
[0]=>string(8) " "
[1]=>string(8) " "
}
PHP_EOL
替换"\n"
没有任何区别。使用preg_match('/(\s+)$/',$row,$matches);
会产生预期结果:
array(2) {
[0]=>string(8) " "
[1]=>string(8) " "
}
使用时也会出现预期:
$row = 'one ';
preg_match('/( +)$/',$row,$matches);
但是,显然,这两者都有自己的理由不被使用。
我的问题是:为什么PHP不能将空格识别为空格而只是空格?
示例: http://sandbox.onlinephpfunctions.com/code/a6f3ea8b422671d86a37b765986395b1dd6f94e8
答案 0 :(得分:2)
您需要使用"\n\r"
代替PHP_EOL
或空格
$row = explode("\n\r",$row);
$row = $row[0];
preg_match('/( +)$/',$row,$matches);
现在,如您所见,您可以在模式中使用regExp
中的空格