所以我有一个小问题
这是我的文字
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”,然后我得到“AFTER_2011/03/01 GREATER”
最佳答案
currentName = sections[i].substring(1, _checker.end());
应该是:
currentName = sections[i].substring(_checker.start(), _checker.end());
我测试了你的正则表达式,没问题。我认为你得到错误字符串的原因是因为你总是从索引 1 中获取子字符串。
第一次迭代(假设基于 1 的索引):
- start==1, end==6 .substring(1, end)
- 是“之后”,所以你很好
第二次迭代
- 开始==18,结束==25
- .substring(1, end) 是 'AFTER_2011/03/01 GREATER' 所以结束 索引很好,但起始索引是 不
- .substring(start, end) 是“更大”, 我相信这就是你想要的
关于java - 再次,正则表达式的小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5251864/