Java 用正则表达式来实现 通配符匹配 (支持*, ?)


    private   static   boolean  wildMatch(String pattern, String str) {
        pattern 
=  toJavaPattern(pattern);
        
return  java.util.regex.Pattern.matches(pattern, str);
    }

    
private   static  String toJavaPattern(String pattern) {
        String result 
=   " ^ " ;
        
char  metachar[]  = { '$', '^', '[', ']', '(', ')', '{', '|', '*', '+', '?', '.', '//' };
        
for  ( int  i  =   0 ; i  <  pattern.length(); i ++ ) {
            
char  ch  =  pattern.charAt(i);
            
boolean  isMeta  =   false ;
            
for  ( int  j  =   0 ; j  <  metachar.length; j ++ ) {
                
if  (ch  ==  metachar[j]) {
                    result 
+=   " / "   +  ch;
                    isMeta 
=   true ;
                    
break ;
                }
            }
            
if  ( ! isMeta) {
                
if  (ch  ==   ' * ' ) {
                    result 
+=   " .* " ;
                } 
else  {
                    result 
+=  ch;
                }

            }
        }
        result 
+=   " $ " ;
        
return  result;
    }
    
    
public   static   void  main(String[] args) {
          test(
" * " " toto " );
          test(
" toto.java " " tutu.java " );
          test(
" 12345 " " 1234 " );
          test(
" 1234 " " 12345 " );
          test(
" *f " "" );
          test(
" *** " " toto " );
          test(
" *.java " " toto. " );
          test(
" *.java " " toto.jav " );
          test(
" *.java " " toto.java " );
          test(
" abc* " "" );
          test(
" a*c " " abbbbbccccc " );
          test(
" abc*xyz " " abcxxxyz " );
          test(
" *xyz " " abcxxxyz " );
          test(
" abc**xyz " " abcxxxyz " );
          test(
" abc**x " " abcxxx " );
          test(
" *a*b*c**x " " aaabcxxx " );
          test(
" abc*x*yz " " abcxxxyz " );
          test(
" abc*x*yz* " " abcxxxyz " );
          test(
" a*b*c*x*yf*z* " " aabbccxxxeeyffz " );
          test(
" a*b*c*x*yf*zze " " aabbccxxxeeyffz " );
          test(
" a*b*c*x*yf*ze " " aabbccxxxeeyffz " );
          test(
" a*b*c*x*yf*ze " " aabbccxxxeeyfze " );
          test(
" *LogServerInterface*.java " " _LogServerInterfaceImpl.java " );
          test(
" abc*xyz " " abcxyxyz " );
    }

    
private   static   void  test(String pattern, String str) {
        System.out.println(pattern
+ "   "   +  str  +   "  =>>  "   +  wildMatch(pattern, str));        
    }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值