【问题标题】:Invalid Java Regex for JSONJSON 的 Java 正则表达式无效
【发布时间】:2015-12-22 14:43:47
【问题描述】:

由于某种原因,这个正则表达式一直说它在 java 中是无效的,但在在线测试器上它工作正常:

({.+?})

我将它用于 JSON 数据结构。

有没有办法让它与 Java 一起工作?

内含链接:http://regexr.com/3bs0p

【问题讨论】:

  • 为什么要用正则表达式解析 JSON?
  • 使用需要它的工具,我知道这不是最好的主意,但我正在做小型 POC。
  • 当您尝试使用此正则表达式时遇到什么错误?您还知道{} 是特殊字符,它们可以像[a-z]{n} 一样用于在a-z 范围内查找n 字符?
  • “不是一个有效的 Java 正则表达式”。当我在这个在线工具上使用它时,我也会遇到错误:java-regex-tester.appspot.com
  • 将该错误消息放入您的问题并提供简单的代码示例,让我们重现它。顺便说一句,您可以使用Pattern.compile(regex) 测试您的字符串是否代表有效的正则表达式。如果您的正则表达式有任何问题,您应该得到通知。

标签: java json regex


【解决方案1】:

这是我的 2 美分:

  1. 您需要在 Java 正则表达式中转义开头的 { 以告诉引擎它不是以 limiting quantifier 开头的大括号。
  2. 请勿使用 regexr.com 测试 Java 正则表达式,请使用支持 Java 正则表达式语法的 OCPSoft Visual Regex TesterRegexPlanet
  3. 不要在整个模式周围使用圆括号,您可以随时使用.group(0)$0 反向引用来引用它。

正则表达式应该看起来像

String pattern = "\\{.+?}"; // Note that `.+?` requires at least 1 character,
                            // Use .*? to allow 0 characters

还有

  1. 不要使用正则表达式解析 JSON。见How to parse JSON in Java

【讨论】:

    【解决方案2】:

    您可能需要使用反斜杠转义您的 { },因为您将它们视为文字字符。

    例如

    (\\{.+?\\})
    

    【讨论】:

      猜你喜欢
      • 2012-05-11
      • 1970-01-01
      • 2020-08-11
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 2018-10-21
      相关资源
      最近更新 更多