gpt4 book ai didi

java - 再次,正则表达式的小问题

转载 作者:行者123 更新时间:2023-12-02 08:22:21 28 4
gpt4 key购买 nike

所以我有一个小问题

这是我的文字

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com