2012-02-05 2 views
0

У меня есть строка, которая имеет формат:JAVA регулярное выражение не суметь

;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); 
} 

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

ответ

1

Я Переключите вход немного, но только по причине представления, что это

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

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)); 
} 
+1

Спасибо Евгений. Ваше решение отлично работало. – user613114

4

Не могли бы вы дать мне какой-либо намек?

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

3

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

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); 
      } 
     } 
    } 
} 
Смежные вопросы