有没有一种很好的方法来评估正则表达式范围,例如,对于诸如
之类的网址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
我一直在摸不着头脑,如果不经过字母表和数字循环,就没有办法做到这一点。
提前致谢!
答案 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);
}
}
这是一个标准的递归元组生成器,但中间有一些字符串中缀。移植到C#是微不足道的。您希望使用类似于StringBuilder
的可变类来获得更好的性能。