描述

正则表达式匹配问题

请实现一个函数用来匹配包括 ‘.’ 和 ‘*’ 的正则表达式。模式中的字符 ‘.’ 表示任意一个字符,而 ‘*’ 表示它前面的字符可以出现任意次(包含 0 次)。

. 一个任意字符

* 表示*前字符出现(0-?)字符

例子

aaa 以下两模式串均可匹配

ab*ac*a  a.a
	

思路

采用两个下标,分别记录目标串与模式串。 循环模式串,若为.,则下标加1; 若为模式串与目标串字符相同,则下标加1,否则看模式串下一个字符算法为*;

代码

public class Demo016 {
    public static void main(String[] args) {
        String string = "aaa";
        String pattern = "ab*a";

        int index = 0;
        int i = 0;
        boolean result = true;

        for (i = 0; i < pattern.length(); i++) {
            if (index >= string.length()) {
                result = false;
                break;
            }
            if (pattern.charAt(i) == '.') {
                index++;
                continue;
            }
            if(pattern.charAt(i) == string.charAt(index)) {
                index++;
            } else if(pattern.charAt(i+1) != '*') {
                result = false;
                break;
            } else if (pattern.charAt(i+1) == '*') {
                i++;
            }
        }
        if(index != string.length() || i != pattern.length()) {
            result = false;
        }
        System.out.println(result);
    }
}