2016-06-29 3 views
0

У меня есть файл, содержащий много строк. Я хочу найти определенную строку, начинающуюся с «msql».Соответствие шаблону регулярного выражения Java начинается с

Я пробовал много сочетаний регулярных выражений, но не знаю.

Pattern pattern = Pattern.compile("^msql"); 
Matcher matcher = pattern.matcher(s); 

или

s.matches("^(msql).*$") or s.matches("^msql") 

пожалуйста предложить правильное регулярное выражение для поиска строки начинаются с "Msql".

EDIT: -

У меня есть файл данных, как это: -

eventlogger 0 0 1 1 1 10 
expireserv 0 0 1 1 1 10 " 
partEOLserv 0 0 1 1 1 10 
msqlpdmm81dd 0 0 25 25 25 

и мой код.

String s = br.readLine(); 
while (s != null) { 
    //Pattern pattern = Pattern.compile("^msql"); 
    //("^(msql).*$") 
    //Matcher matcher = pattern.matcher(s); 
    System.out.println(s); 

    if (s.startsWith("msql")) { 
     System.out.println(s); 

    } 

    s = br.readLine(); 
} 

еще не в состоянии найти.

+4

Почему бы просто не использовать 'String.startsWith()' –

+0

@MichaelMarkidis: - Я пробовал это, но не успел. просмотрите отредактированный вопрос. –

+3

Возможно, он содержит дополнительные пробелы в начале, 's.matches ("^\\ s * msql. * $ ")' –

ответ

0

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

public static void main(String[] args) throws Exception { 
     File f = new File("example.txt"); 
     BufferedReader br = new BufferedReader(new FileReader(f)); 
     String temp = null; 
     while ((temp=br.readLine())!=null) { 
      if (temp.startsWith("msql")){ 
       System.out.println("Match found: "+temp); 
      } 
     } 
    } 

и выход Match found: msqlpdmm81dd 0 0 25 25 25

0

Ваше регулярное выражение для сопоставления содержания является правильным. Я не знаю, почему вы столкнулись с проблемой. Я пробовал вашу программу, и она работает.
Я добавляю код с регулярным выражением ниже.

BufferedReader br = new BufferedReader(new FileReader("<filepath\\filename.extension>")); 
     String s; 
     while ((s = br.readLine()) != null) { 
      if (s.matches("^(msql).*$")){ 
       System.out.println(s); 
      } else { 
       System.out.println("didnt matched"); 
      } 
     } 

Вы также можете проверить состояние с помощью

if (s.startsWith("msql")) 

Это также работает отлично.
Я создал текстовый файл в своем локальном файле и сохранил ваши данные. И я получаю следующий результат.

didnt matched 
didnt matched 
didnt matched 
msqlpdmm81dd 0 0 25 25 25 

Я думаю, что это должно сработать.

Смежные вопросы