引号问题,preg_replace或str_replace

时间:2017-08-17 07:52:29

标签: php preg-replace str-replace

好的,我以前做过正则表达式的东西,但这次我的大脑似乎不想和我一起工作。

我正在尝试从字符串中的一些json中删除一些“和一些”。这是我在preg_replace中获得的距离。

$string  = '"cusComment": "Direct from user input, so need to remove "double quotation marks" and \'single ones as well", "intComment": "" }}';

$blab = preg_replace('/["cusComment": "]"[", "intComment"]/', "", $string);

echo $blab;

这几乎可以用于删除“,带来一些不必要的结果。

编辑: 我想你可以用“其他方式”做到这一点,只允许字母,数字,标点,逗号,短划线,下划线和空格......仍然需要帮助:)

1 个答案:

答案 0 :(得分:0)

这可以通过(*SKIP)(*FAIL)技术实现。它有效地取消了特定匹配的资格,只返回你想要的子串(在这种情况下是双引号)。

以下模式仅处理与正则表达式匹配的棘手双引号。一个简单的str_replace()调用处理单引号,因为所有这些都将被省略。

模式:/("[:,] "|^"|" \}{2})(*SKIP)(*FAIL)|"|\\'/

此模式表示取消以下匹配:

  • 两个双引号,用冒号或逗号和空格分隔
  • 行尾的双引号
  • 双引号,后跟空格和两个右括号
  • 以斜线开头的单引号

Demo of Pattern & Replacement

PHP代码:(Demo)*模式在php实现中需要额外的斜杠

$string  = '"cusComment": "Direct from user input, so need to remove "double quotation marks" and \'single ones as well", "intComment": "" }}';
$blab = preg_replace('/("[:,] "|^"|" \}{2})(*SKIP)(*FAIL)|"|\\\'/', "", $string);
echo $blab;

我不确定您正在对此字符串进行进一步修改以进行准备,但这些任务可能会或可能不会与此模式很好地结合。

如果要删除尾随的}和空格,调用rtrim($blab,' }')似乎合乎逻辑,但是省去额外的函数调用并扩展模式也是合理的: /> /("[:,] "|^"|"(?= \}{2}$))(*SKIP)(*FAIL)|"|\\'| \}{2}$/