2011-11-12 12 views
4

私は入力の間に内容を取ろうとしています。私のパターンは正しいことをしていません。以下 正規表現のJava

はsudocodeです:

s="Input one Input Two Input Three"; 
Pattern pat = Pattern.compile("Input(.*?)"); 
Matcher m = pat.matcher(s); 

if m.matches(): 

    print m.group(..) 

必要な出力:

+1

どのようにそれが正しいことを行うために失敗していますか?何を手に入れていますか? – zigdon

+0

"Input"の間の部分は常にシングルワードになりますか? –

答えて

11

使用Inputおよびを使用するための先読み代わりにmatchesのループで、:

Pattern pattern = Pattern.compile("Input(.*?)(?=Input|$)"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

それがオンラインで作業を参照してください:ideone

しかし、それは、ここでの分割を使用することをお勧めします:

String[] result = s.split("Input"); 
// You need to ignore the first element in result, because it is empty. 

は、それがオンラインで作業を参照してください:ideone

+0

私は分割ソリューションが好きですが、スペースを追加するので、s.split( "Input")です。 – phatfingers

+0

ほぼ。 s.split( "?Input")を使用すると、各単語の後のスペースもキャッチします。 – phatfingers

2

これは動作しません。m.matchesは、文字列全体が式と一致する場合にのみtrueになります。次の2つの方法を行くことができる:

  1. 使用s.split(「入力」)の代わりに、それはあなたの「入力」
  2. 利用Matcher.find()とMatcher.groupの出現箇所間のサブストリングの配列を与えます(int)。しかし、あなたの現在の式は、 "入力"が最初に出現した後のすべてに一致するので、式を変更する必要があります。

挨拶、 ヨースト

0
import java.util.regex.*; 
public class Regex { 

    public static void main(String[] args) { 
     String s="Input one Input Two Input Three"; 
     Pattern pat = Pattern.compile("(Input) (\\w+)"); 
     Matcher m = pat.matcher(s); 

     while(m.find()) { 
     System.out.println(m.group(2)); 
     } 
    } 
}