gpt4 book ai didi

php - 从 JSON 数据中删除注释

转载 作者:行者123 更新时间:2023-12-05 02:23:39 30 4
gpt4 key购买 nike

我需要从 JSON 数据中删除所有 /*...*/ 样式的注释。我如何使用正则表达式来实现这样的字符串值

{
"propName": "Hello \" /* hi */ there."
}

保持不变?

最佳答案

您必须首先使用回溯控制动词 SKIPFAIL(或捕获)避免双引号内的所有内容

$string = <<<'LOD'
{
"propName": "Hello \" /* don't remove **/ there." /*this must be removed*/
}
LOD;

$result = preg_replace('~"(?:[^\\\"]+|\\\.)*+"(*SKIP)(*FAIL)|/\*(?:[^*]+|\*+(?!/))*+\*/~s', '',$string);

// The same with a capture:

$result = preg_replace('~("(?:[^\\\"]+|\\\.)*+")|/\*(?:[^*]+|\*+(?!/))*+\*/~s', '$1',$string);

图案细节:

"(?:[^\\\"]+|\\\.)*+"

这部分描述引号内可能的内容:

"              # literal quote
(?: # open a non-capturing group
[^\\\"]+ # all characters that are not \ or "
| # OR
\\\.)*+ # escaped char (that can be a quote)
"

然后您可以使用 (*SKIP)(*FAIL)(*SKIP)(?!) 使此子模式失败。如果模式在此之后失败,则 SKIP 禁止在该点之前回溯。 FAIL 强制模式失败。因此,被引用的部分被跳过(并且不能出现在结果中,因为您之后使子模式失败)。

或者您使用捕获组并在替换模式中添加引用。

/\*(?:[^*]+|\*+(?!/))*+\*/

这部分描述评论中的内容。

/\*           # open the comment
(?:
[^*]+ # all characters except *
| # OR
\*+(?!/) # * not followed by / (note that you can't use
# a possessive quantifier here)
)*+ # repeat the group zero or more times
\*/ # close the comment

仅当反斜杠位于引号内的换行符之前时,才在此处使用 s 修饰符。

关于php - 从 JSON 数据中删除注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910002/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com