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

Yos*_*sef 1 php regex

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

echo preg_replace('/\s/','-','\n\t\n\r\n');//output '\n\t\n\r\n' instead should be'-----'
Run Code Online (Sandbox Code Playgroud)

编辑:我在真正的应用程序中有动态内容,如:

 preg_replace('/\s/','-',$_Request['content']);
Run Code Online (Sandbox Code Playgroud)

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

preg_replace('/\s/','-',"$_Request['content']");
Run Code Online (Sandbox Code Playgroud)

EDIT2:

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

谢谢

irc*_*ell 7

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

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

使用str_replace:

echo str_replace(array("\r", "\n", "\t", "\v"), '-', "\r\n\t\r\v\n\t");
Run Code Online (Sandbox Code Playgroud)

或者strtr:

echo strtr("\r\n\t\r\v\n\t", "\r\n\t\v", '----');
Run Code Online (Sandbox Code Playgroud)

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

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

基本上,它匹配任何空格字符,任何文字\,然后要么r,n,tv...


Bol*_*ock 6

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

echo preg_replace('/\s/', '-', "\n\t\n\r\n");
Run Code Online (Sandbox Code Playgroud)

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

echo preg_replace('/\\\\[rnt]/', '-', '\n\t\n\r\n');
Run Code Online (Sandbox Code Playgroud)

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