2012-01-18 23 views
-1

私は、このテキストから星の最後の行を取得するパターンを試みています。前後の行を除いて、テキスト内の1行をどのように一致させるのですか?

私が付随するパターンはかなりシンプルです。しかし、私は最後の行を必要開始

(* {5})

の最初と最後の行と一致します。

いくつかのテキストここ

************************************ 

    *         * 





    *         * 


    * Source: Test      * 


    *         * 


    * Amount: $6.50     * 


    *         * 


    ************************************ 
+0

これはすべて1つの文字列ですか? –

+0

はい、すべてが1つのテキストにあります。 星の最初の行の前にテキストがありますが、星の最後の行の後には何もありません。 – Leger

答えて

0

あなたは\zと、文字列の末尾を定義することができます:ここで テキストです。

"\\*{5,}\\z" 

乾杯:

だからRubyの形式で、これはトリックを行うだろう!私の作品

、私はここでそれをテストしてみた:* 296 *

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

class Untitled { 
    public static void main(String[] args) { 
     String test = " ************************************\n" + 
      "*         *\n" + 
      "*         *\n" + 
      "* Source: Test      *\n" + 
      "*         *\n" + 
      "* Amount: $6.50     *\n" + 
      "*         *\n" + 
      "************************************"; 

     Pattern pattern = Pattern.compile("\\*{5,}\\z"); 
     // In case you would like to ignore case sensitivity you could use this 
     // statement 
     // Pattern pattern = Pattern.compile("\\s+", Pattern.CASE_INSENSITIVE); 
     Matcher matcher = pattern.matcher(test); 
     // Check all occurance 
     while (matcher.find()) { 
      System.out.print("Start index: " + matcher.start()); 
      System.out.print(" End index: " + matcher.end() + " "); 
      System.out.println(matcher.group()); 
     } 
    } 
} 

出力:260終了インデックス:インデックスを開始http://www.regexplanet.com/simple/index.html

OKを、それは実際に作業を行います** * ** * ** * ** * ** ****

+0

これは私のために働いていません – Leger

+0

私は私の答えを編集しました。 –

+0

私はあなたがテストに使用するjavaと同じリンクを使用しています。それは動作しません – Leger

0

文字列の最後に一致するパターン'\*{5,}$'を使用します。しかし、バックスラッシュを二重にエスケープする必要があるので、\\*{5,}$

Pattern.compile("\\*{5,}$") 
+0

これはまだ星の最初と最後の行を返します。しかし、私は星の最後の行だけが必要です – Leger

+0

'$'はあなたが 'MULTILINE'修飾子を入力していない限り*文字列*(行の終わりではない)の終わりにマッチすると思いました。 –

+0

テスト時に複数のフラグタグを設定しました – Leger