2016-08-08 5 views
0

私のサンプル文字列に一致するパターン:のJava - 同じパターンの間

a ghgduysgd a fdferfdf a bvfxbgdf a gdfgdfg 

私はの間のすべてのコンテンツを見つける必要があります。

私は(?<=a).*ですが、それはaの後のすべての内容に一致します。しかし、私はa。

最初の反復:ghgduysgd

2回目の反復:fdferfdf

私は、操作のために上記のようなデータを取得したいです。あなたは正規表現を助けることができますか?

あなたがalradyも先読みを使用するように変更し、あなたの正規表現で後読みを使う

答えて

1

(?<=a).*(?=a|$) 

その後.*が非貪欲aを「終了」最初に利用可能で停止します

(?<=a).*?(?=a|$) 

EDIT:a|$はもともとそれはあなたができるだけa

+0

最初の2つの文字列に一致します –

+2

これを修正するには、先読みを 'a | $'に変更することができます。 –

+0

@tobias_kあなたの言ったことはまったく同じです。 –

5

た、以下tobias_kさんのコメントからですこのようregexでみてください(と無視する最初の値)

String path = "a ghgduysgd a fdferfdf a bvfxbgdf a gdfgdfg"; 
String[] arr = path.split("(\\s+)?a(\\s+|$)"); // split based on a preceeded and followed by space 
for (String s : arr) { 
    System.out.println(s); 
} 

O/P:あなたは「」とし、スペースをトリミングし、それを保存している文字列を分割することができ

// Empty String here. Since your String starts with a 
ghgduysgd 
fdferfdf 
bvfxbgdf 
gdfgdfg 
+0

文字列が大きすぎても機能しますか? –

+0

@GopsAB - はい。お試しください – TheLostMind

1

ArrayListその後、単語全体を印刷する場合は、Stringbuilderを使用して文字列を連結することができます。

String word="a ghgduysgd a fdferfdf a bvfxbgdf a gdfgdfg"; 
     List<String> list=new ArrayList<String>(); 
     list= Arrays.asList(word.split("a")); 
     StringBuilder sb = new StringBuilder(); 
     for(String item: list){ 
      item.trim(); 
     System.out.println(item); 
     sb.append(item); 
     } 

     System.out.println(sb); 
+0

同じ考えです。しかし、正規表現で終わった。 –

関連する問題