Как разбить эту строку с помощью регулярных выражений Java - PullRequest
1 голос
/ 07 октября 2010

Я хочу разбить строку

String fields = "name[Employee Name], employeeno[Employee No], dob[Date of Birth], joindate[Date of Joining]";

на

name
employeeno
dob
joindate

Я написал следующий код Java для этого, но он печатает только имя, другие совпадения не печатают.

String fields = "name[Employee Name], employeeno[Employee No], dob[Date of Birth], joindate[Date of Joining]";

Pattern pattern = Pattern.compile("\\[.+\\]+?,?\\s*" );

String[] split = pattern.split(fields);
for (String string : split) {
    System.out.println(string);
}

Что я здесь не так делаю?

Спасибо

Ответы [ 4 ]

5 голосов
/ 07 октября 2010

Эта часть:

\\[.+\\]

соответствует первому [, .+ затем сожирает всю строку (если в строке нет разрывов строки), а затем \\] будет соответствоватьпоследний ].

Вы должны сделать .+ неохотным, поставив ? после него:

Pattern pattern = Pattern.compile("\\[.+?\\]+?,?\\s*");

И не должно \\]+? быть просто \\]?

4 голосов
/ 07 октября 2010

Ошибка в том, что вы соответствуете жадно .Вы можете изменить его на не жадное совпадение:

Pattern.compile("\\[.+?\\],?\\s*")
                      ^
1 голос
/ 07 октября 2010

Онлайн-тестер регулярных выражений на http://gskinner.com/RegExr/?2sa45 очень вам поможет, когда вы попытаетесь понять регулярные выражения и то, как они применяются к заданному входу.

0 голосов
/ 28 марта 2017

Было бы лучше использовать Классы отрицательных символов для соответствия квадратным скобкам? \ [(\ Ш + \ s) + \ ш + [^ \]] \]

Вы также можете увидеть хороший пример как внутреннее использование класса с отрицательными символами (без возврата)?

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