用于匹配 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 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章