2014-12-08 2 views
0

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

, например:

String p="11:33:00.0 2000   0.0  ....... #   0.0  ....... #   0.0  ....... #   0.0  ..."; 

Я следующий код:

public class Test { 


public static void main(String[] args) { 
    String p="11:33:00.0 2000   0.0  ....... #   0.0  ....... #   0.0  ....... #   0.0  ..."; 
    Pattern pat = Pattern.compile("^\\d\\d\\:\\d\\d*"); 
    Matcher m = pat.matcher(p); 
    if (m.find()) { 
    System.out.println(m.start()); 
    System.out.println(p.substring(m.start())); 
    } 

} 
} 

этот код ничего не выводит, даже если бы я попытался просто «^ \ d \ d» ,

, если я правильно «^» обозначает строку, начинающуюся «\ D» для любой цифры

Я также попытался заменить «^» с «\ А» Если я изменить шаблон для

pat = Pattern.compile("\\d\\d"); 

возвращает позицию в 6. Может кто-нибудь сказать мне, почему первый код не работает? :)

THX

ответ

1

Вам нужно напечатать индекс группы 0 внутри блока if, чтобы он печатал совпадающие символы.

String p="11:33:00.0 2000   0.0  ....... #   0.0  ....... #   0.0  ....... #   0.0  ..."; 
Pattern pat = Pattern.compile("^\\d\\d\\:\\d\\d*"); 
Matcher m = pat.matcher(p); 
if (m.find()) { 
    System.out.println(m.group(0)); 
} 

Выход:

11:33 
+0

но с текущим кодом у меня нет матча – sala

+0

@ sala84 что ваш ожидаемого результат? –

+0

syso - это просто проверка, моя проблема в том, что я не могу войти, если с текущим кодом, и я не знаю, почему у меня нет вывода. Вы ничего не изменили, и у вас все еще есть печать :) – sala

0

На моем компьютере ваш пример Test.main работал хорошо, может быть, это зависит от реализации JVM. Я думаю, что если открыть, то вам также необходимо закрыть регулярное выражение с вопросительным знаком:

"^\\d\\d?"