Java正则表达式:匹配JSON子字符串的特定部分

3
我试图编写一个正则表达式来查找以下模式的字符串:
1. 以左括号 { 开头,后跟双引号 " 2. 然后允许包含一个或多个字母数字字符 a-zA-Z0-9 3. 然后是另一个双引号 ",紧接着是冒号 : 和一个左大括号 [ 4. 然后允许任何零个或多个字母数字字符 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

但我知道我完全偏离了方向。有没有正则表达式专家能帮我理清思路?提前感谢!

1
为什么不使用JSON解析器? - jlordo
如果我相信在线正则表达式测试器,这应该可以工作,除非我漏掉了一些Java的细节。 - atomman
Nikolay - 在执行此代码之前,我已经删除了所有空格。jlordo - 解析器是个好主意,但对于这个简单的用例来说感觉有点过度,但如果变得比这更复杂,我肯定会使用解析器。 - IAmYourFaja
1
你遇到了编译器错误(无效的转义序列)。请参考Ian Roberts的答案。在这种情况下,始终在你的问题中包含完整的错误消息。请查看stackoverflow问题清单 - jlordo
1个回答

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

这里的问题在于你需要在方括号前面添加一个额外的反斜杠。这是因为你需要正则表达式包含\[以匹配方括号,这意味着字符串字面量需要包含\\[来转义Java代码解析器中的反斜杠。同样地,你可能还需要转义正则表达式中的{,因为它是一个元字符(用于有界重复计数)。
String regex = "\\{\"[a-zA-Z0-9]+\":\\[[a-zA-Z0-9]*";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接