繁体   English   中英

正则表达式转义字符串中的换行符

[英]Regular expression to escape line breaks in a string

我在 PHP 中有一个字符串,其中包含 Python 代码,如下所示:

$source_code = "\nprint('Hello\nWorld')\n";

我需要转义单引号或双引号之间的换行符。 我想得到类似以下的东西:

$source_code = "\nprint('Hola\\nWorld')\n";

换句话说,只要在单引号或双引号中出现的任何\n前面加上一个\ 我现在在 PHP 中有这个,以防找到单引号:

<?php
    $source_code = "\nprint('Hello\nWorld')\n";
    $source_code = preg_replace("/'(.*)(\\n)(.*)'/", "\\n", $source_code);
    echo $source_code;
?>

但我得到: \nprint(\n)\n 但是,预期的字符串应该是: \nprint('Hello\\nWorld')\n

提前致谢!

你可以使用两次替换,第一次是删除两端的“\n”,然后替换中心\n

仅适用于单个字符串。 如有必要,请随时扩展。

$source_code = "x=input()\nprint('Hello\nWorld')\n"; // thx for the test @Hugo :)

$match = preg_match('/(["\'])(.*)\1/s', $source_code, $matches);

if ($match) {
    $text = $matches[2];
    $text = str_replace("\n", '\\\\n', $text);
    $source_code = preg_replace('/(.*)((["\']).*\3)(.*)/s', '$1$3' . addslashes($text) . '$3$4', $source_code);
}

var_dump($source_code);

工作示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM