Java正则表达式问题

时间:2011-05-17 12:15:58

标签: java regex

我的文字类似

ab1ab2ab3ab4cd

可以创建一个java正则表达式来获取所有以"ab"开头并以"cd"结尾的子字符串吗? e.g:

ab1ab2ab3ab4cd
ab2ab3ab4cd
ab3ab4cd
ab4cd

由于

3 个答案:

答案 0 :(得分:4)

正则表达式(?=(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,则正则表达式将无法生成所需的结果。在这种情况下,您将不得不求助于一些手动字符串算法。

答案 1 :(得分:1)

您似乎想要ab\w+?cd\bab\w+?cd\b

答案 2 :(得分:0)

/^ab[a-z0-9]+cd$/gm

如果示例中仅a b cdigits 0-9出现在中间:

/^ab[a-c\d]+cd$/gm

查看实际操作: http://regexr.com?2tpdu