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

本文介绍了一种将简单的通配符模式转换为正则表达式的方法,并通过一系列测试案例验证了该方法的有效性。该算法能够处理包含'*'等通配符的模式,将其转化为对应的Java正则表达式进行字符串匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


    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));        
    }
 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值