我有类似的文字

ab1ab2ab3ab4cd

可以创建一个Java正则表达式来获取所有以"ab"开头并以"cd"结尾的子字符串吗?例如:
ab1ab2ab3ab4cd
ab2ab3ab4cd
ab3ab4cd
ab4cd

谢谢

最佳答案

如您所见,正则表达式(?=(ab.*cd))会将此类匹配项分组到组1中:

import java.util.regex.*;

public class Main {
  public static void main(String[] args) throws Exception {

    Matcher m = Pattern.compile("(?=(ab.*cd))").matcher("ab1ab2ab3ab4cd");

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

产生:
ab1ab2ab3ab4cd
ab2ab3ab4cd
ab3ab4cd
ab4cd

您需要先看看(?= ... ),否则您将只获得一场比赛。请注意,如果您的字符串中包含2个以上cd,则regex将无法产生所需的结果。在这种情况下,您将不得不求助于一些手动字符串算法。

09-27 18:39