正则表达式匹配

正则表达式 运算符优先级与匹配规则 | 一看就懂!!!(四) 开头 (^)、跟着1个或更多的数字([0-9]+)、和一个小数点(\.)再跟上1个或多个数字([0-9]+),并且后面没有其他任何东西($)。^[a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线的字符串。^[a-zA-Z0-9_]+$ // 所有包含一个以上的字母、数字或下划线的字符串。这个模式与 "&5"、"g7"及"-2" 是匹配的,但与 "12"、"66" 是不匹配的。[^\\\/\^] //除了(\)(/)(^)之外的所有字符。 阅读详情

题目:力扣

解题思路:

做这道题运用的递归的思路。

我们从左到右进行匹配,若当前匹配成功地话,则最后的结果取决于后面是否也能匹配成功。若当前匹配失败的话,则直接返回失败。

我们从左到右对s的字符一个一个进行匹配。

首先,考虑特殊情形:

s.length()p.length()结果
00true
0!0不确定
!00false
!0!0

                 不确定

 可以看出,当p为空字符串的时候,结果取决于s是否是空字符串。这也是为什么一上来就判断p是不是空串。

  • 当p为空串时,结果由s决定。
  • 当p不为空串时,再执行下面的代码

我们接下来讨论当p不是空串的时候。

对s的字符挨个进行判断,对于s的第一个字符(要满足s不为空串),p的第一个字符是什么的时候才能正确匹配呢?我们能够确定s的第一个字符一定是字母,而p的第一个字符一定是字母或'.'

  1. 当p的第一个字符是字母时,且等于s的第一个字母时,一定能匹配。
  2. 当p的第一个字符是'.'时,因为'.'能够代表任意值,因此一定能匹配。

我们能够得到first的值了。

当first为true时,能够确定满足上面两条中的其中之一。

当前字符满足匹配了,我们需要考虑s下一个字符的匹配了。现在需要用到递归了。

  • 满足条件2的情况比较简单,直接返回isMatch(s(1...len), p(1...len))
  • 满足条件1时,也需要分情况讨论了:
  1. 第二个字符是*时,因为*可以代表多个前一个字符,所以需要保留第一个字符,以达到这种效果,返回isMatch(s(1...len), p)
  2. 第二个字符不是*时,直接返回isMatch(s(1...len), p(1...len))

当first为false的时候,能够确定的是s为空串,或者是p的第一个字符其实就是字母和s的不相等。

  • 当p的第二个字符是*的时候,虽然第一个字母和s不匹配,但是因为a*可以代表零个字母,可以忽略*和*号前面的字母,返回isMatch(s, p(2...len))
  • 当p的第二个字符不是*的时候,无论怎样,第一个字符都不能去掉也无法匹配,因此可以直接返回false。

 

class Solution {
    public boolean isMatch(String s, String p) {
        if(p.isEmpty()){
            return s.isEmpty();
        }
        boolean first = !s.isEmpty() && (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.');
        if(first){
            if(p.length()>=2 && p.charAt(1) == '*')
                return isMatch(s.substring(1),p);
            else
                return isMatch(s.substring(1), p.substring(1));
        }
        else{
            return p.length()>=2 && isMatch(s, p.substring(2));
        }
    }
}

 

PowerShell正则表达式(Regex)从右往左进行匹配方法代码实例 主要介绍了PowerShell正则表达式(Regex)从右往左进行匹配方法代码实例,最重要的就是一个RightToLeft参数的运用,本文直接给出代码实例,需要的朋友可以参考下 立即下载

相关推荐

【阿里云大模型高级工程师ACP习题集】2.5 优化RAG应用提升问答准确度(⭐️⭐️⭐️ 重点章节!!!)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 1104

JS正则表达式

首先是一些资料[在线测试网站]()和简明易懂教程。正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。一个正则表达式是一种从左到右匹配主体字符串的模式。“Regularexpression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。

GAN、Transformer、Vue、Django知识学习&&分享者 ZhuBa的博客 zhuba-Ahhh.github.io 2208

西门子200SMART自定义库开发实战:从PID到露点算法的工业应用

本文详细介绍了西门子200SMART自定义库开发实战,涵盖从PID控制到露点算法的工业应用。通过代码封装技巧、多语言支持和性能优化等高级开发方法,帮助工程师提升PLC编程效率。文章特别强调了自创库在实际项目中的优势,如恒温恒湿控制系统的成功案例,展示了自定义库在工业自动化中的强大应用价值。

lake5的博客 1022

正则表达式

文章目录1.什么是正则表达式?2.正则表达式语法转义号限定符字符匹配符选择匹配符定位符分组、捕获、反向引用例题:结巴程序例题3.源码解析4.Matcher、Pattern、PatternSyntaxException介绍5.String中也提供了一些可以调用正则表达式的构造器 1.什么是正则表达式? 正则表达式就是用某种模式去匹配字符串的一个公式,通过他的语法可以快速的定位、提取、处理一些文本内容 一个小例子 找到文本中连续4个数字的部分 2.正则表达式语法 分类 转义号 就比如说 “

weixin_48751562的博客 617

UI-TARS本地部署

UI-TARS是一个用于本地部署的交互控制模型,支持桌面应用的自动化操作。部署步骤包括:首先,从官方GitHub仓库下载项目源码和模型checkpoint;其次,使用vLLM框架进行本地模型部署,启动API服务;最后,通过客户端调用API实现功能。部署过程中可能遇到pynvml模块或模型配置问题,提供了相应的解决方案。此外,还支持通过UI-TARS-Desktop客户端进行本地桌面应用的交互控制。整体流程旨在帮助用户快速实现UI-TARS的本地部署与应用。

DYF的博客 2530

NXP(imx8qxp)系列DDR校准以及android镜像烧录

文章目录一、 不得不吐槽以下nxp的这个代码镜像烧写的过程,做得太开源了,导致镜像根本烧录不进去,实属令人头痛。 一、

永不秃头的程序员的博客 5990

正则表达式之贪婪匹配与非贪婪匹配

在前面正则表达式匹配规则里,提到了 .* . :匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式 * :匹配0个或多个 使用 .* 的话就可以匹配任意长度的任意字符,但是有时候在使用 .*时就可能匹配不到物品们想要的结果,例: import re s='hello 1234567 world' res = re.match('...

流夏_ 4万+

OpenClaw人人养虾:发现与传输

客户端需要先"发现"Gateway 的地址和端口,才能建立连接。OpenClaw 支持多种发现(Discovery)和传输(Transport)机制。

王国平的博客 572

正则表达式匹配/通配符匹配

全文参考labuladong 10.正则表达式匹配 1. 状态和选择 dp[i][j] 表示 s 的前 i 个是否能被 p 的前 j 个匹配 2. base case dp[0][0]=true # s与j是" "空字符,当然可以匹配 3. 状态转移方程 怎么想转移方程?首先想的时候从已经求出了 dp[i-1][j-1]入手,再加上已知 s的第i个字母s[i-1]、p的第j个字母p[j-1],要想的问题就是怎么去求 dp[i][j] 分情况讨论: 考虑最简单的 p[j-1] == s[i-1] .

ryontang的博客 4007

利用SIMULINK搭建一个16QAM调制解调收发系统

1发送模块设计 根据前面介绍的理论知识,我们可以知道16QAM的基本结构,首先我来设计QAM发送段的SIMULINK仿真模块。 图1 16QAM的发送端模块 他的基本工作流程为:将信号通过两路升余弦滤波器,得到滤波以后的信号,滤波器的作用就是为了防止码间干扰。然后将滤波以后的信号和SIN,COS相乘得到调制信号,将调制 下面一一介绍每个模块的具体参数设置以及各个部分信号的波形图。 图2 产生随机数据的信号源 第一部分信号是产生一组随机的数字,作为信源,第二个模块将信号...

FPGA/MATLAB学习教程/源码/项目合作开发 4776

飞牛NAS 0day漏洞导致断网?完整的排查修复方案来了(含一键检测修复工具)

家里网络莫名断网,折腾十来天才发现是NAS被0day漏洞利用了?🔍 本文详细记录了从发现问题到最终解决的全过程,包括如何自查系统是否被入侵、使用检测脚本和专杀脚本进行修复,以及如何通过端口管理、访问控制、监控预警等措施加固系统安全 🔒,帮助遇到同样问题的用户快速排查和解决NAS安全风险 ✅

XiaoqiangClub的博客 5510

正确匹配URL的正则表达式

网上流传着多种匹配URL的正则表达式版本,但我经过试验,最好用的还是从stackoverflow上查到的: (https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|

wangchaoqi1985的博客 4万+

从零实现深度学习框架——理解正则化(一)

本文介绍解决过拟合与欠拟合的方法——正则化,主要介绍L1和L2正则化。

日积月累,天道酬勤 3392

正则表达式——匹配

一 正则表达式简介 1 正则表达式的作用: 用于对字符串进行操作 2 正则的功能(都是对字符串进行的操作): 匹配 替换 提取 二 正则表达式的使用 1 创建方式 const reg = new RegExp("abc"); // 或 const reg = /abc/; 2 简单类的使用 // 可以匹配含有内部字符abc(连续的)的字符串 const reg = /abc/ 3 匹配方法 语法结构: 正则对象.test(字符串); 返回值: ...

知之为知之,不知为不知 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Labview—匹配模式/匹配正则表达式

区别: 匹配模式所提供的字符串匹配选项少,匹配正则表达式选项较多,但是匹配模式的执行速度要比匹配正则表达式快。 匹配正则表达式含有错误输入和输出端,且不接收含有空字符的字符串(\0,ASCII为0的字符)。以下是其正则表达式匹配时一些特殊字符的用法。 特殊字符 用途 . ? – \b – \c – \w – \W – \d – \D – \s – \S – \n – \t – \r – \f – \031 – \x3F – +

weixin_45052358的博客 9410

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

正则表达式的贪婪匹配和非贪婪匹配

正则表达式默认是贪婪匹配,即每个规则都尽可能多的匹配 非贪婪匹配的每个规则具体匹配到哪里,可以总结为 尽可能少的匹配 匹配到下一个规则为止 来看例子 package RegularExpression; import java.util.regex.Matcher; import java.util.regex.Pattern; public class demo5 { public static void main(String[] args) { //正则表达式的贪婪匹配

一纸春秋的博客 2879

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

scala 正则表达式匹配_Scala教程–正则表达式,匹配

scala 正则表达式匹配 前言 这是面向初学者的Scala教程的第5部分。 该博客上还有其他文章,您可以在我正在为其创建的计算语言学课程的链接页面上找到这些链接和其他资源。 此外,您可以在“ JCG Java教程”页面上找到本教程和其他教程系列。 这篇文章是有关正则表达式(regexes)的两个文章中的第一篇,正则表达式对于各种编程任务,尤其是计算语言学任务都是必不可少的。 本教程介绍...

2915

正则表达式 贪婪匹配和懒惰匹配

1、贪婪匹配和懒惰匹配 影响的是正则表达式的限定符的匹配结果;     在限定符后面加上?,则为懒惰模式;在限定符后面不加?,则为贪婪模式;常用的限定符如下: 如下截图参考:http://deerchao.net/tutorials/regex/regex.htm 2、实例 贪婪模式:会匹配最长的以开始位置开始,以结束位置结束的字符串; 懒惰模式:匹配尽可能少的字符 贪婪模式 ...

u010865136的专栏 2万+

正则表达式的组匹配

(1)概述 正则表达式的括号表示分组匹配,括号中的模式可以用来匹配分组的内容。 /fred+/.test('fredd') // true /(fred)+/.test('fredfred') // true 上面代码中,第一个模式没有括号,结果+只表示重复字母d,第二个模式有括号,结果+就表示匹配fred这个词。 下面是另外一个分组捕获的例子。 var m = ‘abcabc’.match(/...

罪无囚 4936

正则表达式懒惰匹配

为什么第一个匹配是aab(第一到第三个字符)而不是ab(第二到第三个字符)?简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹

Joker_honey的博客 4222

【Java】正则表达式分组匹配

分组匹配: 正则表达式分组: 如果想匹配3个数字,正则表达式可以用如下写法: \d{3} 以上代码使用重复量词可以匹配3位数字。 但是在实际应用中,往往需要重复多个字符,例如我想重复ab两个字符,使用以下代码就不合适了,代码如下: ab{3} 以上正则表达式只能够重复3次b。 为了实现重复多个字符可以使用小括号来指定子表达式或者说分组来实现此功能,例如: (ab){3} 上面的正则就可以重复...

JockLiu的博客 4112

正则表达式之最短匹配

这两天继续做项目,发现正则表达式老是出问题,想要匹复杂的网页还真是麻烦,后来在EditPlus里面测试正则表达式,老是一次就匹配了全部,而不是一段段匹配,搜了点关于最短匹配的资料,终于修改好了一部分,这个正则太费时间了,慢慢努力,加油~ 资料来源:http://blog.chinaunix.net/u1/38367/showart.php?id=576289 正则表达贪婪与懒惰

liliflashfly的专栏 5万+

python正则匹配ip地址_IP地址正则表达式匹配方法,ip正则表达式匹配

IP地址正则表达式匹配方法,ip正则表达式匹配正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。在很多文本编辑器里,正则表达式通常被用...

weixin_39658716的博客 1154
上一篇: 剑指 Offer 16. 数值的整数次方
下一篇: import torchvision No module named ‘_lzma‘
PMPWDF
博客等级 码龄10年 44粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值