如何将字符“\ n \ t \ r”替换为“ - ”?

时间:2011-02-01 17:26:12

标签: php regex

如何将字符“\ n \ t \ r”替换为“ - ”?

echo preg_replace('/\s/','-','\n\t\n\r\n');//output '\n\t\n\r\n' instead should be'-----'

编辑:我在真实应用中拥有动态内容,例如:

 preg_replace('/\s/','-',$_Request['content']);

可以通过在变量周围添加“”来修复它吗?

preg_replace('/\s/','-',"$_Request['content']");

EDIT2:

如何将字符串从'str'格式转换为格式“str”?

由于

6 个答案:

答案 0 :(得分:7)

嗯,两件事。首先,问题是替换字符串中的单引号。元字符(\n\t\r等)不在单引号内处理。

但是,请不要使用正则表达式。没有必要使用正则表达式的复杂性。使用

使用str_replace

echo str_replace(array("\r", "\n", "\t", "\v"), '-', "\r\n\t\r\v\n\t");

strtr

echo strtr("\r\n\t\r\v\n\t", "\r\n\t\v", '----');

编辑:啊,现在我看到了你的目标。你有一个字符串\r\n\t\r\v\n\t,并希望将它们替换掉。好吧,你可以通过正则表达式来做到这一点:

$regex = '/(\s|\\\\[rntv]{1})/';
$string = preg_replace($regex, '-', $_GET['content']);

基本上,它匹配任何空格字符,任何文字\后跟rntv ......

答案 1 :(得分:6)

如果您要替换实际的空格字符,则需要将输入字符串括在双引号(")中,以便PHP为您转换转义序列:

echo preg_replace('/\s/', '-', "\n\t\n\r\n");

否则,如果转义序列按字面顺序出现(即您看到\n\t\n\r\n而不是换行符,制表符,换行符,回车符,换行符),则需要替换以下字符类(并保留单引号) (')在输入字符串上):

echo preg_replace('/\\\\[rnt]/', '-', '\n\t\n\r\n');

您应该将content传递给$_POST而不是$_GET,我不知道PHP如何处理GET变量中的制表符,换行符和返回值。

答案 2 :(得分:2)

您正在使用'而不是" s。您应该将代码更改为:

echo preg_replace('/\s/','-',"\n\t\n\r\n");

见这里:单引号和双引号。 http://www.php.net/manual/en/language.types.string.php

答案 3 :(得分:2)

还有一个字符串方法:

echo strtr($str, "\r\n\t\v ", "-----");

如果您想删除换行符但保留空格,请删除尾随的和第五个-


由于您似乎希望转换文字\r\n,因此您需要使用地图(甚至是正则表达式),例如:

echo strtr($str, array('\\r'=>"\r", '\\n'=>"\n", '\t'=>"\t", ' '=>"␣"));
// single quoted strings escaped twice for illustration

答案 4 :(得分:0)

尝试:

echo preg_replace('/\s/','-',"\n\t\n\r\n");

注意字符串上的双引号。

答案 5 :(得分:0)

如果用单引号括起一个字符串,则特殊字符将失去其特殊含义:

echo preg_replace('/\s/','-',"\n\t\n\r\n");