面试题20-正则表达式

题目要求

请实现一个函数用来匹配包含‘.’和‘’的正则表达式,其中'.'表示一个任意字符,而‘’表示上一个字符出现任意次。

题目解析

思路一:

  • 分析

检验正则表达式是否规范
首先,对比字符串和正则表达式的第一个字符是否相等,相等则向后推一位。
遇到.直接各进一位
当遇到*时,检测字符串的字符是否符合条件,若是直接循环跳过,完毕之后整个表达式跳过模板。

  • 代码段
    public static boolean CheckRegular(char[] text , char[] regular) throws Exception {
        
        if(regular == null || regular[0] == '*') {
            throw new Exception("正则表达式为空,或者正则表达式不规范") ;
        }
        
        for(int j = 0 , i = 0 ; i < regular.length ; i ++) {
            
            System.out.println("匹配" + text[j] + "与" + regular[i]);
            //说明text已经对比结束但是regular还有值则
            if(j == text.length ) {
                
                if(regular[i] == '*') continue ;
                if(regular[i] != '*' && i+1

测试代码

public static void main(String[] args) throws Exception {
        char[] text = {'a','a','b','c','s'} ;
        char[] regular = {'.' , 'a','*','b','c','.'} ;
        System.out.println(CheckRegular(text, regular));
        
        char[] text1 = {'a','a','a','a','s'} ;
        char[] regular1 = {'.' , 'a','*','b','*','.'} ;
        System.out.println(CheckRegular(text1, regular1));
        
        char[] text2 = {'a','a','a','a','s'} ;
        System.out.println(CheckRegular(text2, regular));
        
    }

运行结果

匹配a与.
匹配a与a
匹配b与*
匹配b与b
匹配c与c
匹配s与.
true
匹配a与.
匹配a与a
匹配a与*
匹配s与b
匹配s与.
true
匹配a与.
匹配a与a
匹配a与*
匹配s与b
false


看完整源码戳源码地址

你可能感兴趣的:(面试题20-正则表达式)