我的preg_replace也替换了换行符


My preg_replace also replacing linebreak why?

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

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

例如:

X
Y 
Z

输出XYZ

我希望它与

X 
Y 
Z 

因为您从用于比较的类中排除了不在 ''x20-''x7F 范围内的每个字符。

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

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

请注意,版本中的括号是多余的,因为它们已包含在范围内。如果您尝试执行的操作不是将字符()包含在否定字符类中,那么您犯了一个错误,需要重新审视它。