当前位置: 首页 > 知识库问答 >
问题:

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

锺离卓
2023-03-14

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

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

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

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

在本例中,我尝试获取的重新排序字符串的“\state”值未加引号,被regex跳过,因为它包含在:digit之前的“\”,

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

为什么'\state\'编号也被替换了?

也试过https://regex101.com/r/xI1zI4/1…

新编辑:

所以从我的尝试来看,

  (?!\\")

不起作用!!

如果我被允许,我会让这个问题没有得到答复,以防其他人知道为什么。

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

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

非常感谢。

共有1个答案

闻慎之
2023-03-14

(?!\\“) 是一个负的展望,在正则表达式的开头通常没有用处。在您的特定正则表达式中,它根本没有影响:表达式(?!(\\\"))(\:)的意思是“空字符串后面不跟斜杠引号,然后是冒号”,这相当于只是试图匹配冒号本身。

我认为您试图实现的是一个负面的lookbehind,它在PCRE中的语法略有不同:(?

 类似资料:
  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 我正在为我的应用程序编写加载过程,它涉及从文件中读取数据并创建具有适当属性的适当对象。 然而,我在创建一个与这种格式匹配的正则表达式时遇到了麻烦;我已经查看了ECMAScript语法,并以以下方式创建了我的正则表达式,但它与我的测试应用程序中的字符串不匹配: 并且当在以下测试应用程序中使用它时,它无法将正则表达式与字符串匹配:

  • 我有一根下面这样的弦 现在我希望我的程序验证我的输入是否与字符串“phone”的模式相同 我做了以下工作 没奏效。我也尝试了其他的组合。什么都不起作用。 问题:1。我怎样才能做到这一点,而不使用‘模式’像上面?2.如何用图案做到这一点。我尝试了如下模式 Pattern Pattern=Pattern.compile(“(\d+)”);Matcher match=pattern.Matcher(电话

  • 我不熟悉Javascript和正则表达式,所以我一直在研究如何使路由匹配所有以

  • 我将一个regex模式列表传递给< code>grep来检查syslog文件。它们通常匹配IP地址和日志条目; 这只是一个模式列表,例如我正在循环传递的“1\.2\.部分,因此我无法传递“-v”。 我很困惑试图做上述的逆,不匹配线与某个IP地址和错误!1.2.3.4.*已爆炸”将匹配除1.2.3.4告诉我它已爆炸之外的任何syslog行。我必须能够包括一个IP地址不匹配。 在Stack Overf