php - 正则表达式 - 负前瞻性转义

标签 php regex escaping preg-replace negative-lookahead

我有以下 JSON 编码的字符串:

$json = '"|\t|\n|\\\u0027|\\\u0022|"';

除了 \\\u0022\\\u0027 之外,转义所有(已经)转义的字符/代码点的最有效方法是什么? 我虽然关于将 preg_replace() 与负先行正则表达式一起使用,但它没有像我预期的那样工作,输出应该是:

$json = '"|\\\t|\\\n|\\\u0027|\\\u0022|"';

我在 JSON-PHP-PCRE 转义的海洋中迷失了方向,有人可以帮助我吗?

最佳答案

像这样的东西可能会在负前瞻的帮助下工作:

<?php
  $json = '"|\t|\n|\\\u0027|\\\u0022|"';
  $s = preg_replace('~(\\\\)(?!(\\1|u002[27]))~', '$1$1$1', $json);
  var_dump($json);
  var_dump($s);
?>

输出

string(25) ""|\t|\n|\\u0027|\\u0022|""
string(29) ""|\\\t|\\\n|\\u0027|\\u0022|""

关于php - 正则表达式 - 负前瞻性转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5941815/

相关文章:

javascript - 从 JavaScript-Ajax 到 php 的数组关联

ruby - 拆分括号的内容而不分离括号 ruby

python - 用 Python 解析 XML 文件并在每个列表元素中获取字母 'u'

java - 不要在字符串中转义双引号

python - 在 Jinja2 中渲染时转义双引号

php - 我应该如何将斜线添加到仅单引号并忽略双引号?

php - 在php中访问数组中的数据

php - PHP 脚本能否自行中止或检测到中止?

c# - 正则表达式无法过滤 WinForms 中的 TextBox 字符

php - 无法使用 gmail SMTP 从 PHP 发送电子邮件