将通配符*和?处理成正则表达式

 在开发中常碰到允许用户输入一个通配符,然后按照通配符来查找文件。我在.Net的类里面没有找到匹配通配符的类,所以写了一个函数来将输入的通配符转换成正则表达式。

 

 static string ChangePattern(string reg)
        
...{
            
const string specialChars = @".$^{[(|)+";

            StringBuilder sb 
= new StringBuilder();
            sb.Append(
'^');
            
foreach (char ch in reg.ToCharArray())
            
...{
                
if (specialChars.IndexOf(ch) >= 0)
                
...{
                    sb.Append(
'/');
                    sb.Append(ch);
                }

                
else if (ch == '*')
                
...{
                    sb.Append(
".*");
                }

                
else if (ch == '?')
                
...{
                    sb.Append(
".{1}");
                }

                
else
                    sb.Append(ch);
            }

            sb.Append(
'$');
            
return sb.ToString();
        }

 

这个函数的用法如下:

 

using System;
using System.Text;
using System.Text.RegularExpressions;

namespace SpringLiu
...{
    
class Program
    
...{
        
static void Main(string[] args)
        
...{
            
string pattern = "*.tx?";
            pattern 
= ChangePattern(pattern);

            Regex reg 
= new Regex(pattern);
         
            
string[] names = ...{"hello.txt""hello.txx""hello.ext"};

            
foreach (string name in names)
            
...{
                Console.WriteLine(
"{0} match {1} : {2}", name, pattern, reg.Match(name).Success);
            }



        }


        
static string ChangePattern(string reg)
        
...{
            
const string specialChars = @".$^{[(|)+";

            StringBuilder sb 
= new StringBuilder();
            sb.Append(
'^');
            
foreach (char ch in reg.ToCharArray())
            
...{
                
if (specialChars.IndexOf(ch) >= 0)
                
...{
                    sb.Append(
'/');
                    sb.Append(ch);
                }

                
else if (ch == '*')
                
...{
                    sb.Append(
".*");
                }

                
else if (ch == '?')
                
...{
                    sb.Append(
".{1}");
                }

                
else
                    sb.Append(ch);
            }

            sb.Append(
'$');
            
return sb.ToString();
        }



    }

}

 

输出如下:

hello.txt match ^.*/.tx.{1}$ : True
hello.txx match ^.*/.tx.{1}$ : True
hello.ext match ^.*/.tx.{1}$ : False

阅读更多
个人分类: C# & ASP.NET
想对作者说点什么? 我来说一句

java正则表达式通配符图例详解

2010年06月18日 35KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭