2012-03-04 19 views
4

パターンに従った複数の文字列の特定の部分にアクセスしようとしています。Java regex - 文字列の特定の部分を取得する

ここに私がしようとしているものの例があります。

String s = "Hello my name is Joe";  
if(Pattern.matches(s,"Hello my name is ([\\w]*)")) 
{ 
    System.out.println("Name entered: $1"); 
} 

しかし、私のコードは、(正規表現が第一パラメータではなく、秒)matchesメソッドのパラメータ、およびあなたのifが動作する「if文」

+0

'if'行に閉じ括弧がありません... – imm

+1

[documentation](http://docs.oracle.com/javase/7/docs/api/java/util/regex/)を実際に確認しましたか。 Pattern.html)? –

答えて

8

スワップの内側に入ることはありません。

ただし、まだ最初のキャプチャグループは$1で印刷されません。そうするために:あなたは後方Pattern.matches()にパラメータを持っているので

String s = "Hello my name is Joe";  
Matcher m = Pattern.compile("Hello my name is ([\\w]*)").matcher(s); 
if(m.matches()) 
{ 
    System.out.println("Name entered: " + m.group(1)); 
} 
+1

まあ、それは恥ずかしかったです。ありがとうございました。また、私は2番目の行はMatcher m = Pattern.compile( "こんにちは私の名前は([\\ w] *)"でなければならないと思います)matcher(s); – Jrom

+0

あなたが正しいです。編集されました。 – Diego

1

での正規表現の詳細については、このページを参照してください。

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

また、あなたはセット(ブラケット)を必要としません。さらに、Matcherクラスを使用し、group()メソッドを介して括弧の参照を取得する必要があります。

2

私はあなたがこれを見ていると思います:

final String s = "Hello my name is Joe"; 
final Pattern p = Pattern.compile("Hello my name is (\\w++)"); 
final Matcher m = p.matcher(s); 
if (m.matches()) { 
    System.out.printf("Name entered: %s\n", m.group(1)); 
} 

これはpは、文字列の内容全体を一致した場合にのみ、\w++グループ値をキャプチャします。私は\w*\w++に置き換えて、長さの一致を除外し、バックトラックを排除しました。

The Java Tutorial > Essential Classes - Lesson: Regular Expressionsを参照してください。

関連する問題