如何将字符“\ 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”?
由于
答案 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']);
基本上,它匹配任何空格字符,任何文字\
后跟r
,n
,t
或v
......
答案 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");