正则表达式字符集和范围中的字符

时间:2014-06-16 14:00:31

标签: c# regex string

我有一些正则表达式,我用来从输入创建新的字符串,它们都运行正常 我现在要做的是显示正则表达式使用的字符集中允许的字符。

因此,例如我有[^A-Za-z0-9/_#\-\.]+的正则表达式,用任何东西替换该范围之外的任何东西(这是我想要的url格式)。

我有另一个只有[A-Za-z0-9/_#\-\.]的集合,这正是上述规则的反转。我不介意我有两次规则,因为它们无论如何都会在同一时间制作。

我想要的是我可以在第二个表达式中显示所有允许的字符,所以它应该是这样的:(为简洁起见,删除一些)

A,B,C,D ...... Z,a,b,c,d ...... z,0,1,2,3 ... 9,/,_,#, - ,。

有没有办法从正则表达式中提取所有这些字符?

我目前唯一的想法是解析-的大小(不是空格或逗号),然后根据两个字符之间的范围构建字符集。这是字符代码。

有没有人有任何更流畅的想法?或者我错过了什么? 我做完后会发布我的想法,除非有人可以快速省去我的麻烦!

感谢。

1 个答案:

答案 0 :(得分:2)

由于.NET中的char只有2个 16 可能的值,因此迭代所有字符并将其一个接一个地提供给正则表达式应该提供一个可接受的解决方案。如果您知道输入仅限于拉丁页面中的字符,则可以将强力检查限制为最初的256个字符。

var rx = new Regex("[^A-Za-z0-9/_#\\-.]+");
for (char ch = (char)0 ; ch <= (char)255 ; ch++) {
    if (!rx.Match(""+ch).Success) {
        Console.Write(ch);
    }
}

这会打印#-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

Demo on ideone.