【问题标题】:Java regex for matching certain parts of JSON substrings用于匹配 JSON 子字符串某些部分的 Java 正则表达式
【发布时间】:2013-01-07 04:41:15
【问题描述】:

我正在尝试编写一个查找具有以下模式的字符串的正则表达式:

  1. 以左括号{ 开头,后跟双引号"
  2. 然后允许包含 1+ 个字母数字字符的字符串 a-zA-Z0-9
  3. 然后是另一个双引号 ",后跟一个冒号 : 和一个左大括号 [
  4. 然后允许任何 0+ 个字母数字字符的字符串 a-zA-Z0-9

所以一些匹配正则表达式的字符串:

{"hello":[blah
{"hello":[
{"1":[

还有一些匹配的字符串:

{hello:[blah
hello":[
{"2:[

到目前为止,我能想到的最好的是:

String regex = "{\"[a-zA-Z0-9]+\":\[[a-zA-Z0-9]*";
if(myString.matches(regex))
    // do something

但我知道我离基地很远。任何正则表达式大师都可以帮助我吗?提前致谢!

【问题讨论】:

  • 为什么不使用 JSON 解析器?
  • 如果我相信 online regex tester 这应该可以工作,当然除非我缺少一些 Java 细节。
  • Nikolay - 在执行此代码之前,我已经删除了所有空格。 jlordo - 对解析器的良好调用,但对于这个简单的用例来说感觉有点过头了,但如果它变得比这更复杂,我肯定会使用解析器。
  • 你有一个编译器错误(无效的转义序列)。见伊恩罗伯茨的回答。在这种情况下,请始终在您的问题中包含完整的错误消息。见stackoverflow question checklist

标签: java regex json string


【解决方案1】:
String regex = "{\"[a-zA-Z0-9]+\":\[[a-zA-Z0-9]*";

这里的问题是您需要在方括号之前添加一个额外的反斜杠。这是因为您需要 regex 包含 \[ 以匹配方括号,这意味着 字符串文字 需要包含 \\[ 以转义反斜杠Java 代码解析器。同样,您可能还需要在正则表达式中转义 {,因为它是元字符(用于有界重复计数)

String regex = "\\{\"[a-zA-Z0-9]+\":\\[[a-zA-Z0-9]*";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    相关资源
    最近更新 更多