2016-12-09 6 views
0

私はString s = "HFGFHFFHSSH"を得ました。私は出力として望むことは「H」の間のすべての可能な部分文字列の組み合わせ正規表現を使用して2文字の間のすべての部分文字列の組み合わせを抽出します

で上記の文字列の出力がHFGFH HFFH HSSH

である必要があり、私は次のことを試してみました:

String s = "HFGFHFFHSSH"; 
Pattern pattern = Pattern.compile("H(.*?)H"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()){ 
    System.out.println(matcher.group(0)); 
} 

Unfortunalety出力は1つの部分文字列を欠けています結果はHFGFH HSSH

+0

も参照してください。http://stackoverflow.com/questions/17971466/java-regex-overlapping-matches –

+0

@WiktorStribiżewありがとう、私は検索でその質問を見逃していませんでした。 – motaa

答えて

2

です。これには先読み正規表現を使用し、先読み内部から値を取得する必要があります。

(?=(H[^H]*H)) 
  • (?=...)先読み内部両側
  • (...)Hに囲まれたテキストの存在は、グループ#1

RegEx Demo

を一致値を捕捉するためであるアサート肯定先読みでありますコード:

String s = "HFGFHFFHSSH"; 
final Pattern pattern = Pattern.compile("(?=(H[^H]*H))"); 
Matcher matcher = pattern.matcher(s); 

while (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 
+1

regex101サイトは、正規表現のもので実際に起こっていることを私に啓発しています。 :) – motaa

関連する問題