java正则表达式匹配每个组以特定字符串开头

ctr*_*chi 5 java regex

我有一个字符串a1wwa1xxa1yya1zz.

我想让每个小组以a1开头,直到下一个a1被排除在外.(在我的例子,我应该是:a1ww,a1xx,a1yya1zz

如果我使用:

Matcher m = Pattern.compile("(a1.*?)a1").matcher("a1wwa1xxa1yya1zz");
while(m.find()) {
  String myGroup = m.group(1);
}
Run Code Online (Sandbox Code Playgroud)

myGroup每两组捕获1组.
所以在我的例子中,我只能捕获a1wwa1yy.

任何人都有一个好主意?

Phi*_*Lho 5

拆分是一个很好的解决方案,但如果你想留在正则表达式世界,这是一个解决方案:

Matcher m = Pattern.compile("(a1.*?)(?=a1|$)").matcher("a1wwa1xxa1yya1zz");
while (m.find()) {
  String myGroup = m.group(1);
  System.out.println("> " + myGroup);
}
Run Code Online (Sandbox Code Playgroud)

我使用了一个积极的先行,以确保捕获后跟a1,或者行尾.

Lookahead是零宽度断言,即.他们在不推进匹配光标的情况下验证条件,因此他们验证的字符串仍可用于进一步测试.