Как разделить строку карты с помощью Regex в Java - PullRequest
0 голосов
/ 29 декабря 2010

В системе, над которой я работаю, есть какой-то устаревший код, который я хотел бы изменить, но не могу. Этот код хранит значения в карте, которая выглядит как следующая строка:

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

Обратите внимание, что за картой объекта не ставится точка с запятой, а любая другая пара ключ / значение. Есть ли способ использовать Regex в Java и получить первый уровень этой карты, чтобы я мог иметь:

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

Мне нужен только первый уровень, я не собираюсь анализировать field1 и field2 по отдельности.

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

не уверен в случае использования здесь, но вот регулярные выражения, чтобы помочь вам найти его

 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 голос
/ 29 декабря 2010

Думали ли вы использовать ANTLR ? Это распознаватель языка, который намного мощнее, чем регулярное выражение. Таким образом, вы можете иметь дело с составными полями (например, {field1: {field3:"field3"; field4="field4"}; field2: "field2"}). Однако кривая обучения круче, чем у регулярных выражений обучения; но, на мой взгляд, изучение ANTLR того стоит.

0 голосов
/ 29 декабря 2010

выглядит как строка JSON ... вы можете использовать JSON:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...