Регулярное выражение Java с наибольшим соответствием - PullRequest
0 голосов
/ 24 июня 2011

У меня проблема с общим регулярным выражением, которое соответствует (вроде) типичной строке вида

... "field1" "field2" "field3" "field4" ...

Что я хочу сделать, так это получить каждое из этих полей отдельно. Так как поля могут содержать любой символ, я использую регулярное выражение вида "1004" *

... \"(.*?)\" +\"(.*?)\" +\"(.*?)\" +\"(.*?)\" + ...

Проблема в том, что вместо того, чтобы создавать 4 разные группы, Java дает мне только одну, то есть объединяет эти 4, то есть, я получаю одно поле:

field1" "field2" "field3" "field4

вместо

field1
field2
field3
field4

Я даже пытался сделать что-то вроде \ "([^ \"] *) \ "для каждого из полей, но результат тот же.

Как я могу получить эти 4 поля отдельно?

Ответы [ 3 ]

2 голосов
/ 24 июня 2011

Вы можете попробовать метод String.split для таких входов.

    String input = "... \"field1\" \"field2\" \"field3\" \"field4\" ...";
    String[] split = input.split("\"\\s*\"?");
    String field1 = split[1];  // field1
    String field2 = split[2];  // field2
    String field3 = split[3];  // field3
    String field4 = split[4];  // field4
1 голос
/ 24 июня 2011

Каждый вызов matcher.find() будет переходить к следующему совпадению:

String input = "... \"field1\" \"field2\" \"field3\" \"field4\" ...";
Matcher matcher = Pattern.compile("\"(.*?)\"").matcher(input);
while (matcher.find())
    System.out.println(matcher.group(1));

или, если вы действительно хотите захватить все четыре в одном матче:

Matcher matcher = Pattern.compile("\"(.*?)\".*?\"(.*?)\".*?\"(.*?)\".*?\"(.*?)\".*?").matcher(input);
if (matcher.find()) {
    System.out.println(matcher.group(1));
    System.out.println(matcher.group(2));
    System.out.println(matcher.group(3));
    System.out.println(matcher.group(4));
}

Оба выдают одинаковый результат, а именно:

field1
field2
field3
field4
1 голос
/ 24 июня 2011

Вы звоните matcher.group (1), matcher.group (2) и т. Д., Чтобы получить индивидуальные совпадения?Метод по умолчанию возвращает полное совпадение всех полей.

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