JAVA регулярное выражение терпит неудачу - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть строка в формате:

;1=2011-10-23T16:16:53+0530;2=2011-10-23T16:16:53+0530;3=2011-10-23T16:16:53+0530;4=2011-10-23T16:16:53+0530;

Я написал следующий код, чтобы найти строку 2011-10-23T16:16:53+0530 из (;1=2011-10-23T16:16:53+0530;)

Pattern pattern = Pattern.compile("(;1+)=(\\w+);");

String strFound= "";
Matcher matcher = pattern.matcher(strindData);
while (matcher.find()) {
   strFound= matcher.group(2);
}

Но это не работает, как ожидалось. Не могли бы вы дать мне подсказку?

Ответы [ 3 ]

4 голосов
/ 05 февраля 2012

Не могли бы вы дать мне подсказку?

Да.Ни -, ни :, ни + не являются частью \w.

3 голосов
/ 05 февраля 2012

Вы должны использовать регулярное выражение?Почему бы не позвонить String.split(), чтобы разбить строку на границах точки с запятой.Затем позвоните еще раз, чтобы разбить куски знаком равенства.В этот момент у вас будет целое число и дата в виде строки.Оттуда вы можете разобрать дата строка.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public final class DateScan {
    private static final String INPUT = ";1=2011-10-23T16:16:53+0530;2=2011-10-23T16:16:53+0530;3=2011-10-23T16:16:53+0530;4=2011-10-23T16:16:53+0530;";
    public static void main(final String... args) {
        final SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
        final String[] pairs = INPUT.split(";");
        for (final String pair : pairs) {
            if ("".equals(pair)) {
                continue;
            }
            final String[] integerAndDate = pair.split("=");
            final Integer integer = Integer.parseInt(integerAndDate[0]);
            final String dateString = integerAndDate[1];
            try {
                final Date date = parser.parse(dateString);
                System.out.println(integer + " -> " + date);
            } catch (final ParseException pe) {
                System.err.println("bad date: " + dateString + ": " + pe);
            }
        }
    }
}
1 голос
/ 05 февраля 2012

Я немного изменил ввод, но только из соображений представления:

Вы можете попробовать это:

 String input = " ;1=2011-10-23T16:16:53+0530;   2=2011-10-23T16:17:53+0530;3=2011-10-23T16:18:53+0530;4=2011-10-23T16:19:53+0530;";

Pattern p = Pattern.compile("(;\\d+?)?=(.+?);");
Matcher m = p.matcher(input);

while(m.find()){
    System.out.println(m.group(2));
}
...