2012-03-22 8 views
1

与えられた入力から正規表現パターン一致文字列を取得する必要があります。正規表現の一致パターンを取得する

私が取得する必要があるパターンは、同様である

"http://mysite.com/<somerandomvalues>/images/<againsomerandomvalues>.jpg" 

は今、私はこのために、次の正規表現パターンを作成し、

http:\/\/.*\.mysite\.com\/.*\/images\/.*\.jpg 

誰もがすべて一致したパターンを取得する方法を説明することができ、言うことができますJavaを使用してこのregx式で?

+0

SSCCEを作成すると、プロセスで問題が解決する可能性があります –

+0

なぜスラッシュをマスクしますか? –

答えて

2

あなたはスラッシュが、文字通りのドットをマスクしていない:

String regex = "http://(.*)\\.mysite\\.com/(.*)/images/(.*)\\.jpg"; 
    String url = "http://www.mysite.com/work/images/cat.jpg"; 
    Pattern pattern = Pattern.compile (regex); 
    Matcher matcher = pattern.matcher (url); 

    if (matcher.matches()) 
    { 
     int n = matcher.groupCount(); 
     for (int i = 0; i <= n; ++i) 
      System.out.println (matcher.group (i)); 
    } 

結果:

www 
work 
cat 
2

いくつかの単純なJavaの例:

String my_regex = "http://.*.mysite.com/.*/images/.*.jpg"; 
Pattern pattern = Pattern.compile(my_regex); 
Matcher matcher = pattern.matcher(string_to_be_matched); 
// 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()); 
} 
+0

上記のコードを試しましたが、 "不正なエスケープ文字"エラー – Dinesh

+0

がある可能性があります。 "\"のために、私は正規表現をJavaでテストしました。正しいエスケープシーケンスで編集してみましょう。 –

+0

は、正規表現 –

1

実際には、それがあれば明確ではありません一致する文字列全体またはグループのみが必要です。あなたはそれがmathedさを知っているとグループがないので

Bogdan Emil Mariesan's answer

if (matcher.matches()) System.out.println(string_to_be_matched); 

に減少させることができます。

IMHO、user unknown's answerは一致するグループを取得する場合は正しいです。

私はちょうどあなたがマッチしたグループが必要な場合は、あまりにもreplaceFirst()メソッドを使用できることを(他人のために)追加情報を追加したい:2がある場合は、より良い場合

​​

しかしPattern.compileアプローチのパフォーマンスをまたは複数回行う必要がある場合(たとえば、プログラミングコンテストでは、replaceFirst()と書く方が速いなど)

+0

ありがとうBetlista :) – Dinesh

関連する問題