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

 在开发中常碰到允许用户输入一个通配符,然后按照通配符来查找文件。我在.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值