题目描述:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。

思路:

当模式中的第二个字符不是“*”时:

1、如果字符串第一个字符和模式中的第一个字符相匹配,那么字符串和模式都后移一个字符,然后匹配剩余的。

2、如果字符串第一个字符和模式中的第一个字符相不匹配,直接返回false。

当模式中的第二个字符是“*”时:

如果字符串第一个字符跟模式第一个字符不匹配,则模式后移2个字符,继续匹配。

如果字符串第一个字符跟模式第一个字符匹配,可以有3种匹配方式:

1、字符串不动,模式后移2字符,相当于x*被忽略;

2、字符串后移1字符,模式后移2字符;

3、字符串后移1字符,模式不变,即继续匹配字符下一位,因为*可以匹配多位;

这里需要注意的是:Java里,要时刻检验数组是否越界。

public class Solution {public boolean match(char[] str, char[] pattern){if (str == null || pattern == null)return false;int strIndex = 0;int patternIndex = 0;return matchCore(str, pattern, strIndex, patternIndex);}private boolean matchCore(char[] str, char[] pattern, int strIndex, int patternIndex){//有效性检验:str到尾,pattern到尾,匹配成功if (strIndex == str.length && patternIndex == pattern.length)return true;//pattern先到尾,匹配失败if (strIndex != str.length && patternIndex == pattern.length)return false;//模式第2个是*,且字符串第1个跟模式第1个匹配,分3种匹配模式;如不匹配,模式后移2位if (patternIndex + 1 < pattern.length && pattern[patternIndex + 1] == '*'){if ((strIndex != str.length && str[strIndex] == pattern[patternIndex]) || (strIndex != str.length && pattern[patternIndex] == '.'))return matchCore(str, pattern, strIndex, patternIndex + 2) || matchCore(str, pattern, strIndex + 1, patternIndex + 2) || matchCore(str, pattern, strIndex + 1, patternIndex);elsereturn matchCore(str, pattern, strIndex, patternIndex + 2);}//模式第2个不是*,且字符串第1个跟模式第1个匹配,则都后移1位,否则直接返回falseif ((strIndex != str.length && str[strIndex] == pattern[patternIndex]) ||(strIndex != str.length && pattern[patternIndex] == '.'))return matchCore(str, pattern, strIndex + 1, patternIndex + 1);elsereturn false;}
}

正则表达式匹配(字符串)相关推荐

  1. python正则匹配字符串中的数字_Python正则表达式匹配字符串中的数字

    1.使用"\d+"匹配全数字 代码: import re zen = "Arizona 479, 501, 870. Carlifornia 209, 213, 650. ...

  2. python正则匹配11个数字_Python正则表达式匹配字符串中的数字

    导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...

  3. python正则表达式匹配字符串中的电话号码_Python正则表达式匹配字符串中的数字...

    这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 代码: ...

  4. Python正则表达式匹配字符串中的数字

    导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...

  5. 正则表达式匹配字符串(scala)

    正则表达式匹配字符串 代码 import scala.util.matching.Regexobject RegDemo extends App{//构建正则表达式//方式一val pattern1= ...

  6. 正则表达式匹配字符串中以数字结尾的字符

    正则表达式匹配字符串中以数字结尾的字符 <li class="xxx"><a href="http://www.xxx.net/abc90.htm&qu ...

  7. C#中使用正则表达式匹配字符串

    C#中使用正则表达式匹配字符串的方法如下: 1.使用System.Text.RegularExpressions命名空间: 2.使用Matches()方法匹配字符串,格式如下: MatchCollec ...

  8. python-利用正则表达式匹配字符串

    python正则表达式相关的模块是re 该模块有几个常用的方法 re.compile() 生成一个正则对象 re.match().group() 根据正则表达式匹配字符串,如果不是从字符串首位匹配的, ...

  9. python正则表达式匹配字符串相关方法

    python正则表达式匹配字符串相关方法 一.匹配方法简要介绍及注意事项 1.贪婪匹配与非贪婪匹配 2.findall与search的选取问题 3.匹配时"()"和"[] ...

  10. java正则表达式匹配字符串_java正则表达式如何匹配字符串

    java正则表达式匹配字符串的方法:使用tostring,代码为[while(matcher.find()){tmp.add(matcher.group(1).toString());}]. java ...

最新文章

  1. 杨强 : 迁移学习——人工智能的最后一公里
  2. linux chroot 命令 设置根目录路径
  3. django rest framework------得心应手
  4. python opencv 录制视频_OpenCV Python 录制视频
  5. Android WebView获取网页中JavaScript弹框内容
  6. 【计算机组成原理】多功能算数逻辑运算单元
  7. 第一站---大连---看海之旅
  8. python去干扰线_GitHub - Guardiant/VerifyCode: 验证码去干扰线识别
  9. 音视频技术(25)---MPEG-2、MPEG-4、H.264 与视频带宽
  10. 查询所有_学会DSUM函数,轻松搞定所有的数据查询与数据求和
  11. oracle双重for循环sql,Oracle 11g中for循环中的PL / SQL限制
  12. C语言制作简单计算器
  13. C++ | Qt编译DLL
  14. pb 打开文件,写入文件
  15. MacOS / Vmware Fusion无法连接虚拟设备sata0:1,因为主机上没有相应设备
  16. Office:你的 OneDrive 帐户存在问题?
  17. 1.27 Daisy Chains(花瓣)
  18. 一个拼图软件项目Demo
  19. 【Windows 10 驱动程序 已解决】重装 Win 10 系统后 电脑无法识别外接屏幕。投影:你的电脑不能投影到其他屏幕。请尝试重新安装驱动程序或使用其他视频卡。
  20. 该内存不能为read的解决办法:内存不能为read修复工具

热门文章

  1. 活了这么多年,才发现我的语文是体育老师教的
  2. php 正则表达式判断数字,php 正则表达式验证数字
  3. 手机系统电池是否进入省电模式
  4. 传奇更新服务器信息失败怎么回事啊,天天传奇更新失败错误代码422576147处理方法 问题解决方法大全...
  5. 海棠花落 大鱼成形 琳大侠空灵手碟弹唱《大鱼》
  6. MySQL数据库的事务管理
  7. 理解 JavaScript 的sort()方法底层实现与“比值函数”意义
  8. 1138:将字符串中的小写字母转换成大写字母(C C++)
  9. 使用华为手机!不知道这5个实用黑科技,几千块钱就白花了
  10. 图像配准系列之“Sift特征点+薄板样条变换+FFD变换”配准方法