我的preg_replace还替换了linebreak为什么?

时间:2014-12-08 19:55:04

标签: php html

我不希望我的preg_replace替换换行符,这是我的代码

preg_replace('/[^(\x20-\x7F)]*/','', $message_ins);

例如:

X
Y 
Z

输出为XYZ

我希望它与

相同
X 
Y 
Z 

2 个答案:

答案 0 :(得分:2)

因为你要从你正在用于比较的类中排除不在\ x20- \ x7F范围内的每个字符。

答案 1 :(得分:1)

换行符通常由换行符\x0A表示。由于这只是一个角色,并且超出了\x20 - \x7F范围,因此会被替换。如果您不想替换它,则需要将其添加到角色类中。您可能也希望添加回车符\x0D,以防止您处理已通过Windows的文本文件:

preg_replace('/[^\x20-\x7F\x0A\x0D]*/','', $message_ins);

请注意,您的版本中的括号是多余的,因为它们已包含在范围内。如果你试图做一些其他事情而不是在否定的角色类中包含字符(),那么你就犯了一个错误,需要重新审视它。