2016-06-30 23 views
0

テキストファイルからOracleバージョン番号を抽出します。 私のテキストファイルのデータ: -出力ファイルから特定のOracleバージョン番号を抽出する方法

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production 
PL/SQL Release 11.2.0.2.0 - Production 
CORE 11.2.0.2.0 Production 
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production 
NLSRTL Version 11.2.0.2.0 - Production 
Done processing file 

ので、私はここにしたいことがちょうどOracleのメジャーバージョン(例: - 11.2.0.2.0 - > 11)である

が、私は、コードを作業が、いずれかを知ってほしいしていますこれまたは任意のRegExに対する他の最良のアプローチ。

 EZFileReader reader = new EZFileReader(output_file); 
     if (reader.hasMoreLines()) 
     { 
      String version_line = reader.readNextLine().trim(); 
      if (version_line != null) 
      { 
      String[] release = version_line.split(" "); 
      if (release.length > 0) 
      { 
       String[] version = release[6].split("\\."); 
       if (version[0] != null) 
       { 
        version_value = Integer.parseInt(version[0]); 
       } 
      } 
      } 
    } 

答えて

0
Pattern pattern = Pattern.compile("(\\d+)(?:\\.\\d+){4}"); 

EZFileReader reader = new EZFileReader(output_file); 
Integer version = null; 
while(reader.hasMoreLines()) 
{ 
    Matcher m = pattern.matcher(reader.readNextLine()); 
    if (m.find()) 
    { 
    version = Integer.parseInt(m.group(1)); 
    break; 
    } 
} 
0

あなたはこの単純な正規表現を使用することができます。

(\ D +を)(。\ D)+ \ dは

最初に見つかったグループには、バージョン番号です。以下は

はコードの例です:

EZFileReader reader = new EZFileReader(output_file); 
    if (reader.hasMoreLines()) 
    { 
     String version_line = reader.readNextLine(); 
     if (version_line != null) 
     { 
     Pattern pattern = Pattern.compile("(\\d+)\\.(\\d+\\.)+\\d+"); 
     Matcher matcher = pattern.matcher(version_line); 

     if(matcher.find()) { 
      version_value = Integer.parseInt(matcher.group(1)); 
     } 
     } 
} 
+0

正規表現は、文字列内のエスケープ文字として '\\'必要があります。 'reader.readNextLine()'は 'reader.hasMoreLines()'なら 'null'にすべきではなく、それが' .trim() 'ならばチェックに入る前にエラーになります。それ以外は、私の答えはほぼ同じです。 – MT0

+0

はい、そうです。今修正されました。 – mariuszs80

+0

正規表現に '\ .'がまだあります。 – MT0

関連する問題