Оценка диапазона регулярных выражений - PullRequest
0 голосов
/ 21 мая 2010

Есть ли хороший способ оценить диапазон регулярных выражений, скажем, для URL, такого как

http://example.com/[a-z]/[0-9].htm

Это будет преобразовано в:

http://example.com/a/0.htm
http://example.com/a/1.htm
http://example.com/a/2.htm
...
http://example.com/a/9.htm
...
http://example.com/z/0.htm
http://example.com/z/1.htm
http://example.com/z/2.htm
...
http://example.com/z/9.htm

Я почесал голову об этом, и нет никакого красивого способа сделать это без прохождения алфавита и циклического перебора чисел.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 22 мая 2010

Если вам действительно нужно это сделать, не так сложно сгенерировать строки с помощью рекурсии. Вот фрагмент кода, который нужно сделать именно в Java:

public class Explode {
    static void dfs(String prefix, String suffix) {
        final int k = suffix.indexOf('[');
        if (k == -1) {
            System.out.println(prefix + suffix);
        } else {
            prefix += suffix.substring(0, k);
            char from = suffix.charAt(k+1);
            char to = suffix.charAt(k+3);
            suffix = suffix.substring(k+5);
            for (char ch = from; ch <= to; ch++) {
                dfs(prefix + ch, suffix);               
            }
        }
    }
    public static void main(String[] args) {
        String template = "http://example.com/[a-c]/[0-2][x-z].htm";
        dfs("", template);
    }
}

( см. Полный вывод )

Это стандартный генератор рекурсивных кортежей, но с некоторой вставкой строк между ними. Это тривиально портировать на C #. Вы хотели бы использовать изменяемый StringBuilder -подобный класс для лучшей производительности.

2 голосов
/ 21 мая 2010

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

http://foo.com/[a-z]/[0-9].htm

- это очень простое регулярное выражение без * или +, например. Как бы вы расширили такое регулярное выражение?

В вашем случае вам могут сойти с некоторых циклов, но, как я уже сказал - это нетипичное (простое) регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...