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

标签 java regex

所以我有一个小问题

这是我的文字

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/

相关文章:

java - Android SyncService 在 120 秒后被销毁

java - 通过 Ajax 创建 Java 对象

java - 具有可变 URL 用户 ID 的 antMatchers Spring Security 模式

javascript - 匹配正则表达式或(管道)子句中的两个精确字符

regex - Oracle SQL Developer 中的正则表达式模式 : include numbers

sql - 如何在 Postgres 函数中使用正则表达式替换?

java - 如何将一个类中的 boolean 值设置为java中另一个类中的JTextField

java - 使用 IE webdriver 进行 TestNG

java - java如何识别applet程序中注释的applet html标签?

html - 正则表达式查找和替换插入\1 而不是字符串