使用正则表达式提取2个字符之间的所有子串组合

时间:2016-12-09 17:39:53

标签: java regex string

我得到了String s = "HFGFHFFHSSH"。我想要的输出是'H'

之间的每个可能的子串组合

上述字符串的输出应为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));
}

不幸的是,输出缺少一个导致HFGFH HSSH

的子字符串

1 个答案:

答案 0 :(得分: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));
}