正则表达式preg_replace'\ n'和字符串中的所有其他转义字符?

时间:2013-05-31 20:54:23

标签: php regex

我有一个网络应用,需要解析iOS应用中的字符串文件。我试图在字符串中找到反斜杠转义的所有实例(\ n,\ t,\,等),并在PHP中为它们添加一个span类。例如,

"Hello my name is Jim. \nI have \t12\tdogs"

应该成为:

"Hello my name is Jim.<span class='b'>\n</span> and I have <span class='b'>\t</span>12<span class='b'>\t</span>dogs"

不幸的是,我的正则表达式技巧已经过时了。我无法弄清楚如何不仅仅替换转义,而是在保留它们的同时在每一侧添加文本。我该如何正确有效地完成这项工作? (可能一次解析1000多个字符串)

编辑:澄清一下,我想替换任何可能的转义字符,而不仅仅是t和n。所以任何以'\'开头的双字符集,包括'\\'

4 个答案:

答案 0 :(得分:3)

如果没有正则表达式,这是可能的,这对您的速度要求很有帮助。一个简单的str_replace将起作用:

$string = "Hello my name is Jim. \nI have \t12\tdogs";

$newString = str_replace(
    array("\\t", "\\n"), 
    array("<span class=\"b\">\\t</span>", "<span class=\"b\">\\n</span>"), 
    $string
);

答案 1 :(得分:1)

来自Escape Characters上的PHP文档:

  

单引号和双引号PHP字符串具有特殊含义   反斜杠。因此,如果\必须与正则表达式\\匹配,   然后必须在PHP代码中使用“\\\\”或“\\\\”。

这是preg_replace的示例。速度不是此脚本的问题。

$string = 'Hello my name is Jim. \nI have 1\\\2 of \t12\tdogs\r\n';
$pattern = '!(\\\\t|\\\\n|\\\\r|\\\\v|\\\\e|\\\\f|\\\\$|\\\\"|\\\\\\\\|\\\\\\\\\\\\\\\\|\\\\\\\\\\\\)!';
$replacement = "<span class='b'>$1</span>";
$string = preg_replace($pattern,$replacement,$string);
echo "<pre>$string</pre>";

<强>输出

<pre>Hello my name is Jim. <span class='b'>\n</span>I have 1<span class='b'>\\</span>2 of <span class='b'>\t</span>12<span class='b'>\t</span>dogs<span class='b'>\r</span><span class='b'>\n</span></pre>

答案 2 :(得分:0)

$newString = preg_replace('/(\\\\\S)/', '<span class="b">$1</span>', $oldString);

有一点需要注意,当您在PHP字符串中使用\\时,结果字符串实际上包含一个\\\\\\\\都会产生\\

Example

答案 3 :(得分:0)

我认为这可能会对您有所帮助:

如果你想匹配不可打印的字符和反斜杠,试试这个:

$newString = preg_replace('/[\s\a\e\\]/', '<span class="b">$1</span>', $oldString);

但是如果你想匹配以反斜杠开头的所有可打印的alpahnum字符和“\ x **”格式,请试试这个:

$newString = preg_replace('/\\[^[:punct:]\s]|\\\\|\\x[a-fA-F0-9]{1,2}/', '<span class="b">$1</span>', $oldString); 

这个匹配所有字符后反斜杠期望标点字符和字符像\ x23,\ xAF ......