评估正则表达式范围

时间:2010-05-21 15:51:35

标签: c# regex

有没有一种很好的方法来评估正则表达式范围,例如,对于诸如

之类的网址
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 个答案:

答案 0 :(得分:2)

我想一般情况下无法扩展正则表达式。你的例子

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

是一个非常简单的正则表达式,例如没有*+。你会如何扩展这样的正则表达式?

在你的情况下你可能会逃避一些循环,但正如我所说 - 这是一个非典型的(简单)正则表达式。

答案 1 :(得分:2)

如果你真的需要这样做,使用递归生成字符串并不困难。这是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);
    }
}

see full output

这是一个标准的递归元组生成器,但中间有一些字符串中缀。移植到C#是微不足道的。您希望使用类似于StringBuilder的可变类来获得更好的性能。