好的,我以前做过正则表达式的东西,但这次我的大脑似乎不想和我一起工作。
我正在尝试从字符串中的一些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;
这几乎可以用于删除“,带来一些不必要的结果。
编辑: 我想你可以用“其他方式”做到这一点,只允许字母,数字,标点,逗号,短划线,下划线和空格......仍然需要帮助:)
答案 0 :(得分:0)
这可以通过(*SKIP)(*FAIL)
技术实现。它有效地取消了特定匹配的资格,只返回你想要的子串(在这种情况下是双引号)。
以下模式仅处理与正则表达式匹配的棘手双引号。一个简单的str_replace()
调用处理单引号,因为所有这些都将被省略。
模式:/("[:,] "|^"|" \}{2})(*SKIP)(*FAIL)|"|\\'/
此模式表示取消以下匹配:
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}$/