2016-06-29 8 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 \\ 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 

これはうまくいくと思います。