6 декабря 2010 г.

Регулярные выражения в Java

Как-то долгими ноябрьскими днями мне понадобилось парсить файлы... взял я Selenium, взял Java, взял Google и не тут-то было... :) везде одни и те же примеры, т.е. не просто похожие, а именно копипаст, расстроился ибо быстро не получилось!

Начал ковыряться и с использованием "копипаста" из Googl'а наковырял, что указав регулярное выражение мне возвращается всё, кроме того, что ищет регулярка, причём в конструкторе регулярных выражений мне выдаётся именно то, что ищет регулярка, а мой класс выдаёт всё наоборот, снова расстроился...

Снова поиск и чтение...

В итоге, всё же наковырял то, что надо... класс вынимает из кучи текста те значения, которые подходят под регулярное выражение и считает их кол-во


    public static void main(String[] args) throws Exception {
        // задаём регулярное выражение
        Pattern p = Pattern.compile("[\\w]..;");
        // присваиваем переменной текст который нужно парсить
        String ass = "sai++; sas 13i++;45  i+i++;++;  60 \"!@#$%^&*() 54yi++;rw влi++; 4";
        String[] result = p.split(ass);
        Matcher m = p.matcher(ass);
        int i;
        for (i = 0; i < result.length; i++) {
            // пока находятся куски текста соответствующие регулярке мы продолжаем цикл
            boolean res = m.find();
            while (res) {
                // выводим найденные результаты
                System.out.println("m.group() = " + m.group());
                res = m.find();
            }
        }
        // считаем и выводим кол-во совпадений
        int slavazav = i - 1;
        System.out.println(slavazav);
    }

2 комментария:

  1. Неплохо, но сплит там совершенно лишний:

    public static void main1(String[] args) throws Exception {
        // задаём регулярное выражение
        Pattern p = Pattern.compile("[\\w]..;");
        // присваиваем переменной текст который нужно парсить
        String ass = "sai++; sas 13i++;45 i+i++;++; 60 \"!@#$%^&*() 54yi++;rw влi++; 4";
        Matcher m = p.matcher(ass);
        int count = 0;
        // пока находятся куски текста соответствующие регулярке мы продолжаем цикл
        while (m.find()) {
            // выводим найденные результаты
            System.out.println("m.group() = " + m.group());
            count++;
        }
        // выводим кол-во совпадений
        System.out.println(count);
    }

    ОтветитьУдалить