所以我有一点问题
这是我的文字
AFTER_2011/03/01 GREATER_2004_NOT
我想要AFTER和GREATER,所以我有以下正则表达式:
[A-Z]{2,}\\B
起初没关系,我得到了,但第二次我得到整条线。 我试过加'?'之前和之后变得不情愿,我也试过\ G把它变成全球性的。 没有什么对我有用。在其他时候我使用正则表达式它已经自动开始搜索最后停止的地方,但不是这次。 有什么建议吗?
编辑:所以这是我写的代码:
private void checkFilterNames(String[] sections){
_validityPatt = Pattern.compile("[A-Z]{2,}\\B");
boolean foundName;
for (int i=0; i<sections.length; i++){
_checker = _validityPatt.matcher(sections[i]);
_checker.find();
String currentName = sections[i].substring(1, _checker.end());
while (!currentName.equals("ACTION")){
foundName = false;
System.out.println("checking "+currentName);
for (int k=0; k<FilterManager.getNames().length; k++){
if (currentName.equals(FilterManager.getNames()[k])){
foundName = true;
break;
}
}
if (!foundName){
System.out.println("no such FILTER/ACTION/ORDER "+currentName);
System.exit(-1);
}
_checker.find();
currentName = sections[i].substring(1, _checker.end());
}
}
所以这就是代码。我想要分离AFTER然后GREATER。我在第一个循环之前遇到一个小错误,我得到'AFTER'然后我得到'AFTER_2011 / 03/01大''
答案 0 :(得分:2)
currentName = sections[i].substring(1, _checker.end());
应该是:
currentName = sections[i].substring(_checker.start(), _checker.end());
我测试了你的正则表达式,没关系。我认为你得到错误字符串的原因是因为你总是从索引1获得子串。
第一次迭代(假设基于1的索引):
第二次迭代
答案 1 :(得分:0)
不太清楚。你可以试试像这样的正则表达式
([A-Z]{2,})_