опять же небольшая проблема с регулярным выражением - PullRequest
0 голосов
/ 09 марта 2011

Итак, у меня есть небольшая проблема

Вот мой текст

AFTER_2011/03/01 GREATER_2004_NOT

Я хочу ПОСЛЕ и БОЛЬШЕ, поэтому у меня есть следующее регулярное выражение:

[A-Z]{2,}\\B

ВСначала все в порядке, и я получаю ПОСЛЕ, но во второй раз я получаю всю строку.я пытался добавить '?'до и после, чтобы превратить его неохотно, я также попытался сделать его глобальным.у меня ничего не работаетв других случаях я использовал regex, он автоматически начинал поиск там, где последний раз останавливался, но не в этот раз.какие-либо предложения?

Редактировать: Итак, вот код, который я написал:

 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»

Ответы [ 2 ]

2 голосов
/ 10 марта 2011
currentName = sections[i].substring(1, _checker.end());

должно быть:

currentName = sections[i].substring(_checker.start(), _checker.end());

Я проверил ваше регулярное выражение, все в порядке.Я думаю, причина того, что вы получаете неправильную строку, состоит в том, что вы всегда получаете подстроку с индексом 1.

Первая итерация (при условии, что индекс основан на 1):

  • start ==1, конец == 6 .подстрока (1, конец)
  • это «ПОСЛЕ», так что вы хорошо

Вторая итерация

  • start == 18, end == 25
  • .substring (1, end) равен 'AFTER_2011 / 03/01 GREATER', поэтому конечный индекс хорош, но начальный индекс не равен
  • .substring (start, конец) "БОЛЬШОЙ", это то, что вы хотите, я верю
0 голосов
/ 10 марта 2011

Не очень понятно. Вы можете попробовать регулярное выражение, как это

([A-Z]{2,})_
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...