#java #regex
#java #регулярное выражение
Вопрос:
Приведенный ниже код не дал мне содержимого между датами. можете ли вы мне помочь.
String res="05/22/2014 03:22:39.288 ffff gggg kkkkkk lllllll ssss 05/22/2014 03:22:39.288 oooooo ppppp qqqq rrrrrr sss 05/22/2014 03:22:39.378 mmmmmm nnn oooo ";
String regEx="((0?[1-9]|1[012])/(0?[1-9]|[12][0-9]|3[01])/((19|20)\d\d).*([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[\d]*)(.*?)((0?[1-9]|1[012])/(0?[1-9]|[12][0-9]|3[01])/((19|20)\d\d).*([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[\d]*)?";
Matcher matcher = Pattern.compile(regEx).matcher(res);
while(matcher.find())
{
String group = matcher.group();
System.out.println(group);
}
Даже я пытался ниже использовать разделение строк с помощью регулярного выражения в Java, но это дает только один результат:
String regEx="((0?[1-9]|1[012])/(0?[1-9]|[12][0-9]|3[01])/((19|20)\d\d).*([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].([\d][^\s] )?)";
String[] split = res.split(regEx);
Комментарии:
1. Откуда берется вводимый текст? Вам также нужно проверять даты?
2. только 22.05.2014 03:22:39.288 тип даты и времени, который мне нужно принять
Ответ №1:
Вы можете использовать это регулярное выражение для записи вашего текста:
(?<=d{2}/d{2}/d{4} d{2}:d{2}:d{2}.d{3} )(.*?)(?=(?: d{2}/d{2}/d{4} d{2}:d{2}:d{2}.d{3}|$))
И возьмите ваш текст в группе # 1, т.е.
matcher.group(1);
Рабочая демонстрация
Комментарии:
1. Спасибо. я не получил последнего, т.е. у него есть дата, но не последняя
2. он не работает, если в содержимом в нескольких строках, как показано ниже, 2 комментария
3. 22.05.2014 03:22:39.288 ооооо ppppp qqqq rrrrrr sss
4. 23.08.2014 n03:22:39.345 mmmmmm nnn ooooo
5. Поскольку
05/22/2014 03:22:39.288 oooooo ppppp qqqq rrrrrr sss
это дает:oooooo ppppp qqqq rrrrrr sss
Ответ №2:
Причина, по которой вы получаете только один результат при разделении, заключается в том, что оператор * является жадным в регулярном выражении. Прочтите это, это хороший материал: http://www.regular-expressions.info/repeat.html