我有一个字符串a1wwa1xxa1yya1zz.
我想让每个小组以a1开头,直到下一个a1被排除在外.(在我的例子,我应该是:a1ww,a1xx,a1yy和a1zz
如果我使用:
Matcher m = Pattern.compile("(a1.*?)a1").matcher("a1wwa1xxa1yya1zz");
while(m.find()) {
String myGroup = m.group(1);
}
Run Code Online (Sandbox Code Playgroud)
myGroup每两组捕获1组.
所以在我的例子中,我只能捕获a1ww和a1yy.
任何人都有一个好主意?
拆分是一个很好的解决方案,但如果你想留在正则表达式世界,这是一个解决方案:
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是零宽度断言,即.他们在不推进匹配光标的情况下验证条件,因此他们验证的字符串仍可用于进一步测试.