字符串正则匹配(递归/DP)

Wildcard-Matching &  Regular Expression Matching

Wildcard-Matching中?匹配任意一个字符,*匹配任意长度字符串包括空字符串

方法一:记录*的位置,分别考虑*匹配空,匹配一个,匹配两个,三个...

 1     bool isMatch(const char *s, const char *p) {
 2         int sStar=-1,pStar=-1;
 3         int i=0,j=0;
 4         for(i=0;i<strlen(s);)//不考虑p字符串长 s=‘‘aa‘‘, p=‘‘a‘‘
 5         {
 6             if(p[j]==‘*‘)
 7             {
 8                 sStar=i;
 9                 pStar=j;
10                 j++;
11             }
12             else if(p[j]==s[i]||p[j]==‘?‘)
13             {
14                 i++;
15                 j++;
16             }
17             else if(sStar>=0)//没有匹配但之前记录sStar了
18             {
19                 i = ++sStar;
20                 j = pStar+1;
21             }
22             else return false;
23         }
24         while(p[j]==‘*‘)j++;
25         return j==strlen(p);
26     }

方法二:DP dp[i][j]=1表示s[0:i]与p[0:j]匹配

原文地址:https://www.cnblogs.com/demian/p/10498659.html

时间: 2024-10-09 07:22:43

字符串正则匹配(递归/DP)的相关文章

关于Boost,C Regex对短目标字符串正则匹配的性能分析

昨天对长目标字符串下的各种正则匹配库性能进行了总结,得出结论是Boost regex性能最佳.今天将其应用到项目当中,果不其然,长字符串匹配带来的性能损失基本没有了,当然,目前规模并不算太大,但是在可预计规模内Boost可以完全达到要求. 不过有一点,在Boost,C同时去除长字符串匹配的影响后,剩下都是短字符串匹配,发现Boost比C好的并不是好很多,例如10000+次短字符匹配中,其中包含匹配成功和不成功的,Boost regex+系统其他模块用时130ms左右,而C regex+系统其他模

特定中文字符串正则匹配

最近遇到了一个匹配中文特定字符串的问题,记录下来 问题描述:匹配"美丽乡村"中的一个字符或几个,如果是多个字符,顺序不能改变,如"丽乡" 解决过程: 之前知道匹配中文字符串,正则表达式中使用的是unicode编码的范围,如/^[x{4e00}-x{9fa5}]+$/u 想着特定字符是否可以不用转换成unicode编码,于是写出正则  '/^[美]{0,1}[丽]{0,1}[乡]{0,1}[村}]{0,1}$/u',总不能正确匹配 于是把汉字改成unicode编码,正

iOS截取特定的字符串(正则匹配)

有时候我们会有需求从一个字符串中截取其他的字符串,根据情况的不同,我们来分析几种方法~~ 一. 固定长度字符串中截取固定位置长度的字符串 // 这是比较简单的一种情况:比如截取手机号的后4位 let phoneNum = "18515383061" var suffixNum:String? // 从倒数第四位开始截取,截取到最后 suffixNum = phoneNum.substringFromIndex(phoneNum.endIndex.advancedBy(-4)) // 从

Python之字符串正则匹配

需求: 正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配(因为是贪婪匹配 ). 而你想修改它变成查找最短的可能匹配. import re text2 = 'Computer says "no." Phone says "yes."' str_pat=re.compile(r'"(.*)"') # 匹配引号包裹的任意文本,并编译 print(str_pat.findall(text2)) #['no." Phone says

Python正则匹配递归获得给出目录下的特定类型的文件小技巧

需求是酱的: 输入一个目录,这个目录包含检测目录的必备信息但不准确需要获得后加工一下,如给出目录:C:\Program Files\Common Files\DESIGNER,需要检测的目录是:C:\Program Files\Common Files\System,即从给出的目录中获取前面的信息,后面的补上的目录(System)是指定的.从E:\res\tmp目录中检测xml文件,返回xml文件的目录 代码如下: 1 import os 2 import re 3 pathlist = []

字符串正则匹配替换

re.sub的功能 re是regular expression的缩写,表示正则表达式:sub是substitude的缩写,表示替换 re.sub是正则表达式的函数,实现比普通字符串更强大的替换功能 sub(pattern,repl,string,count=0,flag=0) 1))pattern正则表达式的字符串 eg中r'\w+' 2))repl被替换的内容eg中'10' 3))string正则表达式匹配的内容eg中"xy 15 rt 3e,gep" 4))count:由于正则表达

LeetCode10 Hard,带你实现字符串的正则匹配

本文始发于个人公众号:TechFlow 这是LeetCode的第10题,题目关于字符串的正则匹配,我们先来看题目相关信息: Link Regular Expression Matching Difficulty Hard Description Given an input string (s) and a pattern (p), implement regular expression matching with support for '.' and '*'. '.' Matches an

ruby 把字符串转为正则匹配表达式

需求 函数,需要通过参数传递字符串,用来做正则匹配 reg = '[0-9]+' def func(str, reg) str.scan(reg) end 由于 reg 在其它地方定义, reg 是字符串, 传进来后发现没法直接用于正则匹配 返回的结果总是 [] 空字符串. 解决 通过 Regexp 来通过 string 生成正则匹配的条件 def func)(str, reg) reg = Regexp.new("#{reg}"[0..-1]) "#{str}"

js正则实现从一段复杂html代码字符串中匹配并处理特定信息

js正则实现从一段复杂html代码字符串中匹配并处理特定信息 问题: 现在要从一个复杂的html代码字符串(包含各种html标签,数字.中文等信息)中找到某一段特别的信息(被一对“|”包裹着),并对他进行加粗.加下滑线处理. 解决思路: 1.用正则匹配“|”出现的次数,处理刚好出现2次的(html字符串中一般不会含有这个字符) 2.使用正则分组,获取“|”之间的内容,并进行替换(添加样式) 代码: function specialDeal(){ htmlStr = htmlStr.replace