我的目标是找到给定正则表达式的多个匹配项。匹配可能重叠(在SO上讨论得很好),它们可能从字符串的相同位置开始(似乎没有在SO中解决)。这是一个例子:
qabc: (?=((\S*(?P<a>-A-)\S* )(\S*(?P<b>-B-)\S* )?(\S*(?P<c>-C-)\S* )?)).*
{'a': ['-A-'], 'b': ['-B-'], 'c': []}
{'a': ['-A-'], 'b': [], 'c': ['-C-']}
qac : (?=((\S*(?P<a>-A-)\S* )(\S*(?P<c>-C-)\S* )?)).*
{'a': ['-A-'], 'c': ['-C-']}
我期待这个输出:
qabc: (?=((\S*(?P<a>-A-)\S* )(\S*(?P<b>-B-)\S* )?(\S*(?P<c>-C-)\S* )?)).*
{'a': ['-A-'], 'b': ['-B-'], 'c': []}
qac : (?=((\S*(?P<a>-A-)\S* )(\S*(?P<c>-C-)\S* )?)).*
{'a': ['-A-'], 'c': ['-C-']}
相反,我得到了这个输出:
(?=...)
从我的测试代码中可以看出,我从其他SO帖子中收集了两个学习内容,包括this one:
public class MainActivity extends AppCompatActivity implements hold_undo_fragment.toggleButtonListener {
public void runBeaconDistances(){
final Intent i = new Intent(this, corsi.class);
final Intent j = new Intent(this, search_key.class);
final Intent k = new Intent(this, corsi2.class);
beaconDistances = new BeaconDistances(this, beaconIDs);
beaconDistances.setListener(new BeaconDistances.Listener() {
@Override
public void onBeaconDistancesChanged(BeaconID beaconID) {
if(beaconID != null){
int beaconMinor = beaconID.getMinor();
switch (beaconMinor) {
case 9911: startActivity(i);
break;
case 11904: startActivity(j);
break;
case 27710: startActivity(k);
break;
}
}
}
});
}
}
匹配子字符串而不消耗它。任何帮助都将不胜感激。