2011-12-06 20 views
2

誰でも私がJavaの正規表現で次のことをするのを助けてくれますか?java正規表現

前後にあるものを無視して、指定されたStringから5番目の位置から3文字を読み込む必要があります。

例:testXXXtest

期待される結果:あなたはすべてで正規表現を必要としないXXX

+0

なぜ正規表現ですか? – HRgiger

答えて

13

ただ、サブ使用:あなたはこのようにそれを行うことができ、正規表現を使用する必要がないので yourString.substring(4,7)

を:

Pattern pattern = Pattern.compile(".{4}(.{3}).*"); 
Matcher matcher = pattern.matcher("testXXXtest"); 
matcher.matches(); 
String whatYouNeed = matcher.group(1); 

それはステップバイステップで、どういう意味:

.{4} - 任意の4文字

( - 任意の3つの文字

) - - あなたは

.{3}を必要とするもの、すなわち取り込みグループ、開始終了キャプチャグループを、あなたは今

.*それを得た0以上の任意の文字が続きます。

matcher.group(1) - 第1(唯一の)キャプチャグループを取得します。

+0

優れていますか? – javaagn

+0

@ user1083956:あなたは歓迎です –

+0

説明をありがとう、夢のように働く..歓声 – javaagn

4

あなたはこれを達成するためにsubstring()メソッドを使用することができるはずです。

string example = "testXXXtest"; 
string result = example.substring(4,7); 
+0

それはありがとう。しかし残念ながら、これは正規表現を使用する既存のフレームワークに追加する必要があります。 – javaagn

+0

@javaagnこのような制約は、質問で宣言されているはずです。 – gyorgyabraham

1

これは役立つかもしれない:Groups and capturing in java.util.regex.Pattern

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

public class Example { 
    public static void main(String[] args) { 
    String text = "This is a testWithSomeDataInBetweentest."; 
    Pattern p = Pattern.compile("test([A-Za-z0-9]*)test"); 
    Matcher m = p.matcher(text); 
    if (m.find()) { 
     System.out.println("Matched: " + m.group(1)); 
    } else { 
     System.out.println("No match."); 
    } 
    } 
} 

この版画:ここ

は一例です

Matched: WithSomeDataInBetween 

あなたは、サブストリングを追求するのではなく、入力文字列(へというパターン全体にマッチしたくない場合は、その)、find()の代わりにmatches()を使用できます。後でfind()を呼び出して、より一致する部分文字列を検索し続けることができます。

また、あなたの質問では、2つの「テスト」文字列の間に許容される文字と文字列の長さが指定されていませんでした。私はゼロを含む長さがOKであると仮定し、小文字と大文字と数字で構成される部分文字列を探します。

+0

それに感謝します。私は例があったらいい? – javaagn

1

これに部分文字列を使用できます。正規表現は必要ありません。

yourString.substring(4,7); 

正規表現を使用することもできますが、必要がない場合はどうすればよいでしょうか。もちろん、このコードをnullと文字列が短すぎるから保護する必要があります。

+0

regexパターンは探しているものです。私はそれがあなたと以前に言及された他の人のようにJavaで簡単だと知っています。 – javaagn

0

利用String.replaceAll()クラスメソッドは、パフォーマンスを最適化する必要がない場合は、クリーンなオプションのString.replaceAll()クラスメソッドを試すことができます

String sDataLine = "testXXXtest"; 
String sWhatYouNeed = sDataLine.replaceAll(".{4}(.{3}).*", "$1"); 

参照