gpt4 book ai didi

php - 简单正则表达式不在多维 JSON 字符串上

转载 作者:可可西里 更新时间:2023-10-31 23:39:43 24 4
gpt4 key购买 nike

所以我将提供这个简单的 json 字符串示例,涵盖我的大部分实际字符串情况:

"time":1430702635,\"id\":\"45.33\",\"state\":2,"stamp":14.30702635,

我正在尝试对字符串中的数字进行 preg 替换,以将它们括在引号中,但索引已被引用的数字除外,例如在我的字符串中 - '\state\':2 到目前为止,我的正则表达式是

 preg_replace('/(?!(\\\"))(\:)([0-9\.]+)(\,)/', '$2"$3"$4',$string);

在这种情况下,我试图获得的结果字符串具有不带引号的“\state\”值,被正则表达式跳过,因为它在 :digit 之前包含\",

"time":"1430702635",\"id\":\"45.33\",\"state\":2,"stamp":"14.30702635",

为什么 '\state\' 数字也被替换了?

试穿 https://regex101.com/r/xI1zI4/1还有..

新编辑:

所以根据我的尝试,

  (?!\\")

不工作!!

如果允许的话,我会不回答这个问题,以防其他人知道原因。

我的解决方案是使用这个正则表达式,而不是 NOT,我选择了 yes ..

$string2 = preg_replace('/(\w":)([0-9\.]+)(,)/', '$1"$2"$3',$string);

谢谢。

最佳答案

(?!\\")是一个否定的前瞻,通常在正则表达式的开头没有用。在您的特定正则表达式中,它根本没有效果:表达式 (?!(\\\"))(\:)意思是“空字符串后面没有斜杠引号,然后是冒号”,这等同于只尝试自己匹配一个冒号。

我认为您试图完成的是负面回顾,它在 PCRE 中的语法略有不同:(?<!\\") .进行此更改似乎符合您的要求:https://regex101.com/r/xI1zI4/2

关于php - 简单正则表达式不在多维 JSON 字符串上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30021685/

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