用于匹配 JSON 子字符串某些部分的 Java 正则表达式

Posted

技术标签:

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

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

    以左括号 开头,后跟双引号" 然后允许包含 1+ 个字母数字字符的字符串 a-zA-Z0-9 然后是另一个双引号 ",后跟一个冒号 : 和一个左大括号 [ 然后允许任何 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 - 对解析器的良好调用,但对于这个简单的用例来说感觉有点过头了,但如果它变得比这更复杂,我肯定会使用解析器。 你有一个编译器错误(无效的转义序列)。见伊恩罗伯茨的回答。在这种情况下,请始终在您的问题中包含完整的错误消息。见*** question checklist 【参考方案1】:
String regex = "\"[a-zA-Z0-9]+\":\[[a-zA-Z0-9]*";

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

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

【讨论】:

以上是关于用于匹配 JSON 子字符串某些部分的 Java 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

java的正则表达

仅当字符串的一部分前面没有某些字符时,如何匹配它?

JAVA 正则表达式的三种模式: 贪婪, 勉强和占有的讨论

Java中的正则表达式

正则表达式 选中以某些字符开始,某些字符结尾的字符串

使用后缀树进行近似子串匹配