如何在Java中使用Regex拆分映射字符串

时间:2010-12-28 22:38:40

标签: java regex

在我工作的系统中,有一些我希望改变的遗留代码,但不能。此代码将值存储在地图中,该地图类似于以下字符串:

userId: "929290"; name: "Donnie Darko"; obj : {field1: "field"; field2: "field2"} phone: "666-6666";

请注意,对象图后面没有分号,但每个其他键/值对都是。有没有办法在Java中使用Regex并获得此地图的第一级,以便我可以:

userId: "929290"
obj : {field1: "field"; field2: "field2"} 

我只想要第一级,我不打算单独解析field1和field2。

3 个答案:

答案 0 :(得分:1)

不确定这里的用例,但这里有帮助你找到它的正则表达式

 Pattern userIdPattern = Pattern.compile("^userId:\\s*\"(\\d+)\";.*$"); // will be the userId number
 Pattern objPattern = Pattern.compile(".*(obj\\s*:\\s*\{[^\}]+\}).*"); //will be the JSON object inside
 Matcher userIdMatcher = userIdPattern.matcher("userId: \"929290\"; name: \"Donnie Darko\"; obj : {field1: \"field\"; field2: \"field2\"} phone: \"666-6666\";");
 if(userIdMatcher.find()){
     System.out.println("userId : " + .group(1));
 }
 Matcher objPatternMatcher = objPattern.matcher("userId: \"929290\"; name: \"Donnie Darko\"; obj : {field1: \"field\"; field2: \"field2\"} phone: \"666-6666\";");
 if(objPatternMatcher.find()){
     System.out.println(objPatternMatcher.group(1));
 }

答案 1 :(得分:1)

您是否考虑过使用ANTLR?它是一种语言识别器,比正则表达式更强大。这样,你可以处理复合字段(例如{field1: {field3:"field3"; field4="field4"}; field2: "field2"})学习曲线比学习正则表达式更陡峭;但是,在我看来,学习ANTLR是值得的。

答案 2 :(得分:0)

看起来像一个JSON字符串......你可以使用JSON:)