[英]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.