/*
原题:“在一篇英文文章中查找指定的人名,人名使用二十六个英文字母(可以是大写或小写)、空格以及两个通配符组成(*、?),通配符“*”表示零个或多个任意字母,通配符“?”表示一个任意字母。
如:“J* Smi??” 可以匹配“John Smith” .
请用C语言实现如下函数:”
void scan(const char* pszText, const char* pszName);
以下并未完全按要求实现,但意思到了。
GCC 4.5.2
*/
#include <cassert>
#include <iostream>
using namespace std;
char const * regexp_probe(char const * src, char const * pattern)
{
if(!src || !pattern){
return 0;
}
char c = *pattern;
if(isalpha(c) || c == ' '){ // match: a-z, A-Z, <space>
if(*src == c){
if(regexp_probe(src + 1, pattern + 1)){
return src;
}
else{
return 0;
}
}
else{
return 0;
}
}
else if(c == '?'){
if(*src == 0){
return 0;
}
else if(regexp_probe(src + 1, pattern + 1)){
return src;
}
else{
return 0;
}
}
else if(c == '*'){
while(1){
if(regexp_probe(src, pattern + 1)){
return src;
}
else if(*src == 0){
return 0;
}
else{
++src;
}
}
}
else if(c == 0){ // end
return src;
}
else{
assert(false);
}
}
char const * regexp_match(char const * src, char const * pattern)
{
while(*src){
if(regexp_probe(src, pattern)){
return src;
}
++src;
}
if(*pattern == 0){
return src;
}
return 0;
}
void test(char const *src, char const *ptn)
{
cout << "match " << "\"" << src << "\" by pattern " << "\"" << ptn << "\": " << flush;
char const * pt = regexp_match(src, ptn);
cout << (pt ? pt : "<mismatch>") << endl;
}
int main()
{
test("", "");
test("a", "");
test("", "a");
test("a", "a");
test("ab", "a");
test("ca", "a");
test("cab", "a");
test("cab", "a?");
test("ca", "a?");
test("ca", "?a");
test("cab", "?a?");
test("", "?");
test("a", "?");
test("b", "?");
test("abc", "?");
test("", "*");
test("a", "*");
test("a", "a*");
test("a", "*a");
test("ba", "*a");
test("acc", "*a");
test("bbaacc", "*a");
test("abbaacc", "*a?cc*");
test("abbaacc", "abba*ccc");
test("abbaacc", "d*");
test("abbaacc", "*d*");
return 0;
}相关推荐
C++代码实例:正则表达式
可以采用正则表达式来实现字符串匹配功能。一种简单的正则表达式是由英文字母(区分大小写)、数字及通配符“*”和“?”任意组合而成的。“?”代表任意一个字符,“*”代表零个或任意多个字符。例如,a*b可以匹配acb,aabb,afdfdb,ab等,但不可以匹配ac,bb,abbc;a?b可以匹配acb,abb,但不可以匹配ab,accb。试编写一个程序,从文件中读入N个字符串,再从键盘上读入任意一个合乎规则的正则表达式,例如:“a?bb*d”,输出符合正则表达式的字符串。
正则表达式-理解与实现
1、概述正则表达式,又称规则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个语法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。简而言之:如果遇到无法简单处理的字符串提取、替换问题,可以优先考虑正则表达式2、优点。
EPLAN二次开发实战指南:从API接口到定制化界面
本文为EPLAN二次开发实战指南,详细介绍了从搭建C#开发环境、理解API接口到创建定制化插件的完整流程。通过实战案例,如批量修改设备属性和设计交互式界面,帮助电气工程师利用EPLAN二次开发实现工作流程自动化与深度定制,从而显著提升设计效率。
算法设计与分析: 3-14 正则表达式匹配问题
3-14 正则表达式匹配问题 问题描述 许多操作系统采用正则表达式实现文件匹配功能。一种简单的正则表达式由英文字母、数字及通配符“ * ”和“?”组成。“?”代表任意一个字符。“ * ”则可以代表任意多个字符。 现要用正则表达式对部分文件进行操作。 试设计一个算法,找出一个正则表达式,使其能匹配的待操作文件最多,但不能匹配任何不进行操作的文件。所找出的正则表达式的长度还应是最短的。 数...
Halcon工业相机开发全流程:从SDK配置到实时图像采集(C++版)
本文详细介绍了使用C++进行Halcon工业相机开发的完整流程,从SDK配置到实时图像采集的实现。涵盖环境搭建、设备初始化、回调机制、参数控制等关键环节,并提供异常处理和实战案例,帮助开发者快速掌握工业视觉系统的开发技巧。
A-Level经济例题解析及练习Opportunity Cost
例题Question: Opportunity CostYou are selling your 1996 Mustang. You have already spent $1000 on repairs. At the last minute, the transmission dies. You can pay $600 to have it repaired, or sell the car “as is.”In each of the fol
揭开正则表达式的神秘面纱
揭开正则表达式的神秘面纱 [出处:http://www.regexlab.com/zh/regref.htm] 引言 正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbb...
mysql 计算不同胜率的活跃玩家的次日,3日,7日留存率
它根据每天的日期(logymd)和最高段位(max_rank)、胜率段落(win_rate_segment)进行分组,并计算总玩家人数(total_players)、第二天的留存人数(next_day_players)、第三天的留存人数(day3_players)和第七天的留存人数(day7_players)。注意:不是新手留存,是段位活跃玩家留存;最终的结果则是将留存数据进行展示,按照日期(date)、最高段位(rank_level)、胜率段落(win_rate_segment)进行排序。
(一)正则表达式快速入门、底层实现、语法
如果要想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:(1)限定符(2)选择匹配符(3)分组组合和反向引用符(1)特殊字符(1)字符匹配符(1)定位符。
Android Framework SurfaceFlinger面试题及参考答案
请简述 SurfaceFlinger 在 Android 系统中的作用。 SurfaceFlinger 是 Android 系统中一个非常关键的服务。它主要负责将多个应用程序的 Surface 合成到一个屏幕显示内容中。 从应用程序的角度来看,每个应用都有自己的 UI 界面,这些 UI 界面实际上是由一系列的图层(Surface)构成。例如,一个应用可能有背景图层、按钮图层、文本图层等。应用通过向 SurfaceFlinger 提供这些 Surface 来请求显示。 SurfaceFl
黑猫带你学Nand第8篇:NandFlash的供电情况详解
是指在任何工作条件下,设备允许的最大电压、电流、功率以及温度等参数的界限值。
最简单的java正则表达式
最简单的java正则表达式 浅入浅出java正则表达式,用最容易理解的顺序快速理解java正则表达式 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、正则的基础使用 判断一串字符是否全为数字 boolean bool = Pattern.matches("\\d+","1234csdn"); System.out.println(b..
openHarmony之AI Engine:万字讲解如何在应用、开发板上接入AI大模型调用
本文章介绍如何在 OpenHarmony 开发板上集成和部署各类 AI 大模型,实现终端直接聊天功能,并为语音助手、智能机器人等应用提供 AI 接口支持。
Leetcode刷题笔记题解(C++):10. 正则表达式匹配
思路:目前只采用了递归的方法来求解 这道题最麻烦的地方在出现*的情况。 首先从最简单的情况开始,只看要比较的两个字符,即源字符串s[i]和模式串p[j] 如果p[j] == '.'或者p[j] == s[i]:当前匹配成功 如果p[j] == '*':需要进一步分情况讨论,假设p[j]前面p[j-1]存在 如果p[j-1] == '.'或者p[j-1] == s[i],则p[j-1]p[j]这两个模式串可以使用1到无数次,匹配成功 如果p[j-1] == '.'和p[j-1] == s[i]都不...
YOLOv8 骨骼结构识别详细说明
YOLOv8骨骼结构识别是一种基于深度学习技术的医学影像分析方法,主要用于X光、CT等影像中的骨骼定位与识别。该系统具有多骨骼同步识别能力,可应用于手部、脊柱、骨盆等不同部位,并能精确定位骨骼关键点。技术实现包括数据预处理、模型训练、推理检测、关键点分析和批量处理五个核心模块,支持骨折检测、骨龄评估等临床应用。该系统需注意医学合规性,要求高质量标注数据,并针对骨骼影像特点进行特征工程优化,同时考虑不同设备的部署需求。
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
Java正则表达式的实现
Java正则表达式的实现:Pattern和Matcher
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
最简单的正则表达式
最简单的正则表达式 最简单的正则表达式 hi 能匹配的字符串(举例)hi him his this philips 只想要这个结果:\bhi\b \b[Hh]i\b \b(H|h)i\b 那么只匹配:hi \d+匹配数字串 匹配结果:10000,1234567,222222,8888888等等 "\b"匹配一个单词的边界 ...
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
JS对正则表达式的实现
【代码】JS对正则表达式的实现。
最最简单的正则表达式(Java表达)
一、你身边的例子: 创建一个Oracle账户,鼠标刚离开,你怎么就知道邮箱无效? 准备手机登录,刚点击获取验证码,你怎么就知道号码格式错误? 二、答案揭晓:正则表达式 去学去吧! ...
java正则表达式的简单使用
正则表达式的定义: 它是一个用于匹配字符串的模型或者模板. 语法: 最简单的形式就是去寻找一个或一段字符.它使用一些特殊的字符,如[*], 表示任意形式的字符串. [.]表示任意单个字符串. jdk中正则表达式的相关的包和类: java.util.regex.Pattern: 建立匹配模型 java.util.regex.Matcher: 匹配器 使用这两个类的步骤: 1.编译...
前端正则表达式,最简单的
一.和正则相关的方法 使用正则表达式的格式 “/ /” 一般常用的跟正则相关的方法有match、test和replace。 其中match,replace都是字符串上的方法,test是正则对象上的方法。 1.test() ,一般用于表单验证 (1)正则对象方法,检测测试字符串是否符合该规则,返回true和false,参数(测试字符串) (2)Boolean = 表达式.test("要验证的内容"); 2.replace() (1)replace() 方法用于在字符串中用一些字符替换...
正则表达式简易实现
正则表达式 虽然正则表达式在 U n i x/Linux程序设计环境里随处可见,但在其他的系统里使用得却没有这么广泛。一个正则表达式本身也是一个字符序列,它定义了一集能与之匹配的字符串。大部分字符只是简单地与相同字符匹配,例如正则表达式 a b c将匹配同样的字符序列,无论它出现在什么地方。在这里还有几个元字符(meta character),它们分别表示重复、成组或者位置。
史上最简单的正则表达式,读完就能让你轻松使用正则表达式
快速上手正则表达式
最简单的正则表达式例题
import re str1 = ‘中文名:贝拉克·侯赛因·奥巴马,外文名:Barack Hussein Obama II,’ ‘别名:欧巴马,国籍:美国,民族:德裔族,出生地:美国夏威夷州檀香山,’ ‘出生日期:1961年8月4日,职业:政治家、律师、总统,毕业院校:哥伦比亚大学、’ ‘哈佛大学,信仰:新教,主要成就:1996年伊利诺伊州参议员、美国第56届、5’ ‘7届总统、2009年...
2142



被折叠的 条评论
为什么被折叠?



