在本章中,我们将学到如何对一个或者更多的字符执行简单的字符匹配。
匹配文本字符
Ben
就是一个正则表达式。因为这是一个普通的文本,所以看起来可能不像是正则表达式,但是事实上确实是。正则表达式可以包含普通的文本(甚至是只包含普通的文本)。无可否认,这是正则表达式处理的极大浪费,但是可能确实一个学习的起点。
下面是个例子:
文本
Hello, my name is Ben. Please visit
my website at http://www.forta.com/
.
正则表达式
Ben
结果
Hello,
my name is Ben
.
Please visit
my website at http://www.forta.com/
.
分析
这里的正则表达式是文本常量,匹配了原始文档中的
Ben
。
让我们看看另外一个例子,使用了同样的文本和不同的正则表达式
文本
Hello, my name is Ben. Please visit
my website at http://www.forta.com/
.
正则表达式
my
结果
Hello,
my
name is Ben.
Please visit
my
website at http://www.forta.com/
.
分析
my
同样是静态文本,但是注意到这里匹配了两次。
有多少匹配?
大多少正则表达式引擎的默认行为仅仅是返回第一个匹配。在上面的例子中,第一个
my
将会被匹配,而不是第二个。但是为什么会有两个匹配呢?许多的正则表达式实现都提供了一个获取所有匹配的机制(通过一个数组或者特定的格式返回)。在
Javascript
中,可以通过一个额外的标志
g(global)
来获取所有的匹配。
参考附录
A
:流行应用和语言中的正则表达式,学习如何在你的工具或者语言中执行全局查找。
处理大小写
正则表达式是大小写敏感的,所以
Ben
不会匹配
ben
。尽管如此,大部分的正则表达式实现都提供了一个选项是否使得匹配大小写不敏感。
Javascript
用户,可以通过指定
i
标志来使得搜索的时候是大小写不敏感的。
同样的参考附录
A
来看看你的语言和工具如何执行大小写不敏感的查找操作。
匹配任意字符
到现在为止正则表达式还只是能够匹配静态文本。这看起来真有点虎头蛇尾。下面我们看看如何匹配动态的字符。
在正则表达式之中,特殊的字符(有一组特殊字符)可以用来指示需要搜索的字符。“
.
”(句号)用来匹配任意字符。
如果你曾经使用过
DOS
的文件搜索,正则表达式
"."
的含义和
DOS
中的“
?.
”是一样的。而
SQL
用户则应该知道和
SQL
中的“
_
”
(
下划线
)
一样。
所以,使用“
c.t
”进行搜索将匹配
cat
和
cot
(以及另外一些可能无意义的前后为“
c
”“
t
”的单词)。
下面是一个例子:
文本
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
正则表达式
sales.
结果
sales1
.xls
orders3.xls
sales2
.xls
sales3
.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
分析
这里的正则表达式“
sales.
”用来查找以“
sales
”开头并后跟一个任意字符的文本。可以看到,九行中有三行匹配这个模式。
你可能会注意到有时候我们使用“模式”来描述真正的正则表达式。
注意到正则表达式匹配文本中的内容。匹配一般不是整个字符串,而是匹配此模式的文本,尽管这一半是一个字符串的一部分。在上面的例子中,正则表达式并没有匹配整个文本文件,而是匹配了其中的一部分。在将正则表达式匹配结果传递给其他代码或者应用程序处理的时候这点区别很重要。“
.
”可以用来匹配任意的字符、字母表中的字母,数字,甚至是“
.
”本身。
文本
sales.xls
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
正则表达式
sales.
结果
sales.
xls
sales1
.
xls
orders3.xls
sales2
.
xls
sales3
.
xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
分析
示例中包含一个
sales.xls
文件,此文件可以被正则表达式“
sales.
”所匹配,因为“
.
”匹配任意一个字符。
多个“
.
”可以一起使用,包括放在一起(使用“
..
”可以匹配任意两个字符)或者用于模式中的不同地方。
让我们来看看另外一个例子。现在要找的可能是
"na"
或者
"sa"
而且不管后面跟着的是什么字符:
文本
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
正则表达式
.a.
结果
sal
es1.xls
orders3.xls
sal
es2.xls
sal
es3.xls
apac1
.xls
europe2.xls
na1
.xls
na2
.xls
sa1
.xls
分析
正则表达式“
.a.
”不但匹配了
na1
、
na2
和
sa1
,还找到了没有预计到的其他匹配。为什么?因为这个模式是匹配所有中间字母为
a
的三个字符。
在“
.a.
”后面加上一个“
.
”会如何?下面是一个尝试:
文本
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
正则表达式
.a..
结果
sale
s1.xls
orders3.xls
sale
s2.xls
sale
s3.xls
apac1
.xls
europe2.xls
na1.
xls
na2.
xls
sa1.
xls
分析
可以看到,“
.a..
”并不比“
.a.
”要好多少。加上了一个“
.
”符号只是多匹配了一个字符。由于“
.
”是一个特殊字符,当需要搜索“
.
”符号的时候如何办呢?
匹配特殊字符
“
.
”在正则表达式中含有特殊的意义。如果你需要在模式中使用“
.
”,你应该明确的告诉正则表达式你想使用的是一个真正的“
.
”字符,而不是有着特殊含义的“
.
”字符。为了做到这点,可以在“
.
”前面加上反斜线“
\
”对字符进行转义。这里的“
\
”也是特殊字符,和其本身的含义是不同的,可以对特殊字符起到转义作用。因此,“
.
”可以表示任意字符,而“
\.
”则表示真正的“
.
”字符。
再来看看上面的例子,这次使用“
\.
”替代“
.
”。
文本
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
正则表达式
.a.\.xls
结果
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
分析
“.a.\.xls”解决了这个问题。第一个“
.
”匹配了“
n
”或者“
s
”。第二个“
.
”匹配了“
1
”或者“
2
”,而“
\.
”则使用真正的“
.
”字符匹配了文件名和扩展的分隔符,
xls
匹配其自身。事实上,不加上
xls
也可以解决问题,这里加上的原因主要是为了避免匹配如
"sa3.doc"
类似的文档。
在正则表达式中,“
\
”总是用于一个或者多个有着特殊字符的含义之前,从而取消其特殊含义。这里看到了“\.”的使用,在以后将会看到更多利用“
\
”的例子。
就像你所想象的一样,转义“
\
”的方法就是使用两个反斜线“
\\
”。
另外,“
.
”匹配所有字符吗?可能并不正确。在很多的正则表达式实现中,“
.
”匹配除了换行符以外的其他字符。
小结
正则表达式,也称为模式,是由字符组成的字符串。这些字符可以是文本字符(真正的文本),也可以是元字符(含有特殊含义的字符)。在本章中你学习到了如何使用文本文字以及元字符来匹配单个字符。“
.
”用来匹配任意字符,“
\
”用来对特殊字符进行转义。
分享到:
相关推荐
2. 模式的匹配:正则表达式可以匹配简单的字符序列,也可以匹配复杂的字符组合,包括单个字符、字符集、字符序列、可选字符、重复字符等。 3. 字符集和选择:字符集用方括号表示,用于匹配方括号内的任意一个字符,...
和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一...
- 匹配单个字符:`\d` 代表数字,`\w` 代表字母或数字,`\s` 代表空白符。 - 匹配范围:`[a-z]` 匹配小写字母,`[A-Z]` 匹配大写字母,`[0-9]` 匹配数字。 2. **重复匹配** - `{n}` 指定精确重复次数,如`\d{3}`...
JESD79-2F DDR2 JESD79-3F DDR3 JESD79-4D DDR4 JESD79-5C DDR5 JESD209-2F LPDDR2 JESD209-3C LPDDR3 JESD209-4E LPDDR4 JESD209-4-1A LPDDR4X JESD209-5C LPDDR5(X)
COMSOL二维光子晶体角态研究:单胞与超胞能带计算及边界态与角态特性分析,COMSOL二维光子晶体角态研究:单胞与超胞能带计算及边界态与角态特性分析,comsol二维光子晶体角态。 单胞能带,超胞能带,边界态以及角态计算。 ,comsol;二维光子晶体;角态;单胞能带;超胞能带;边界态计算,基于Comsol的二维光子晶体角态及能带边界计算研究
六自由度机械臂抓取动作仿真与代码解析:抓取动画、关节参数变化及轨迹图解详解,六自由度机械臂抓取动作仿真指南:掌握两套代码实现动画与轨迹图模拟学习攻略,六自由度机械臂抓取动作仿真-8 两套关于抓取动作的代码,包括抓取动画、关节角、角速度、角加速度的变化仿真、以及抓取轨迹图 简单易懂好上手~ ,六自由度机械臂;抓取动作仿真;抓取动画;关节角变化;角速度角加速度;抓取轨迹图;两套代码;简单易懂好上手,六自由度机械臂抓取动作仿真演示:代码与轨迹图解
ITC网络广播工具软件
Multisim四位密码锁电路仿真设计:设定、开锁与声光报警功能演示资料包,Multisim四位密码锁电路仿真设计:设定、输入、开锁与报警功能详解,附源文件、原理说明书与演示视频,multisim四位密码锁电路仿真设计 功能: 1.通过拨码开关1进行初始密码设定。 2.通过拨码开关2输入密码,实现开锁判断。 3.如果密码正确,LED绿灯亮,表示开锁。 4.如果密码不正确,LED红灯亮,蜂鸣器鸣叫,声光报警。 资料包含:仿真源文件+原理说明书+演示视频 ,四位密码锁电路、Multisim仿真设计、初始密码设定;拨码开关输入;开锁判断;LED灯显示;声光报警;仿真源文件;原理说明书;演示视频,Multisim四位密码锁电路仿真设计:初始密码设置与智能解锁功能的声光报警展示
俗话说,摸鱼摸的好,上班没烦恼,毕竟谁能拒绝带薪拉屎呢(手动狗头) 这是一个云开发职场打工人专属上班摸鱼划水微信小程序源码,没有后台 直接导入微信开发者工具即可运行,UI简约大气漂亮,只需登录微信公众平台配置完合法域名即可轻松上线。 用户进入摸鱼小程序,可以自由设置薪资,上班时间、下班时间、发薪日、 月工作天数以提醒自己摸鱼,全民打酱油,让自己成为摸鱼冠军,《商鞅摸鱼哲学》 摸鱼不是自我放纵,而是个人实力的积蓄,我们的小目标是晚睡晚起 小程序中的今日待办会提醒用户带薪拉屎和闲逛,下方展示的是距离休息日的天数,距离下一次发工资的天数和节日的天数。
【毕业设计】基于Java的开发的一个集合校园二手交易、拼车、失物招领等功能的app_pgj
个人记录:PICkit3离线烧录流程 使用软件:MPLAB X IDE v5.30 记录时间:20250215
基于Matlab代码的电力系统状态估计与实验仿真研究:扩展卡尔曼滤波和无迹卡尔曼滤波在电力系统动态状态估计中的应用及效果分析,Matlab仿真实验研究:基于扩展卡尔曼滤波器与无迹卡尔曼滤波器对电力系统状态估计的影响及验证,状态估计 电力系统状态估计 Matlab代码 实验仿真研究 电力系统由于测量值和传输误差,还有测量噪声的影响,会对状态估计产生影响。 因此,需要对嘈杂的测量进行滤波,以获得准确的电力系统运行动态。 本文使用扩展卡尔曼滤波器(EKF)和无迹卡尔曼滤波器(UKF)来估计电力系统的动态状态。 扩展卡尔曼滤波EKF、无迹卡尔曼滤波UKF 利用扩展的无迹卡尔曼滤波器估计了动力系统的动态状态。 对WECC 3机9总线系统和新英格兰10机39总线系统进行了案例研究。 结果表明EKF和UKF都能准确地估计电力系统的动态状态。 ,核心关键词:状态估计; 电力系统状态估计; Matlab代码; 实验仿真; 测量值误差; 测量噪声; 扩展卡尔曼滤波器(EKF); 无迹卡尔曼滤波器(UKF); 动力系统; 动态状态估计; WECC 3机9总线系统; 新英格兰10机39总线系统。,Matlab
springboot在线考试--
台达DVP EH3与MS300 PLC&变频器通讯程序的全面解决方案,台达DVP EH3与MS300通讯程序:稳定可靠的频率控制与启停管理系统,台达DVP EH3与台达MS300通讯程序(TDEH-9) 可直接用于实际的程序,程序带注释,并附送触摸屏程序,有接线方式和设置,通讯地址说明等。 程序采用轮询,可靠稳定 器件:台达DVP EH3系列PLC,台达MS300系列变频器,昆仑通态7022Ni 功能:实现频率设定,启停控制,实际频率读取,加减速时间设定。 资料:带注释程序,触摸屏程序,接线和设置说明,后续有技术咨询。 ,核心关键词:台达DVP EH3; 台达MS300; 通讯程序(TDEH-9); 轮询; 稳定; 频率设定; 启停控制; 实际频率读取; 加减速时间设定; 触摸屏程序; 接线方式; 设置说明; 技术咨询。,台达PLC与变频器通讯程序(带注释、触摸屏控制)
项目资源包含:可运行源码+sql文件 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。项目具有较高的学习借鉴价值,也可拿来修改、二次开发。 个人账户管理:支持用户注册、登录与个人信息编辑;提供密码找回及账号安全保护措施。 声纹采集:利用麦克风设备录制用户的声纹样本;支持多种录音格式和质量调整,确保采集到清晰、准确的声纹数据。 声纹模板库管理:建立和维护一个安全的声纹模板库;支持声纹模板的添加、删除、更新和查询操作。 声纹比对与识别:运用深度学习算法对输入的声纹数据进行特征提取和匹配;实现快速、准确的声纹身份验证。 多场景应用支持:适用于多种场景,如门禁系统、移动支付、远程登录等;可根据实际需求定制开发相应的应用场景。 实时监控与报警:实时监控系统运行状态,包括声纹识别成功率、处理速度等指标;当出现异常情况时,及时发出报警信息。 数据分析与报告生成:收集并分析声纹识别过程中的数据,如识别准确率、处理时间等;根据用户需求输出包含详细图表说明的专业级文档供下载打印保存。 社区互动交流:设立论坛版块鼓励用户分享心得体会讨论热点话题;定期邀请行业专家举办线上讲座传授实用技巧知识。 音乐筛选与推荐:集成音乐平台API,根据用户的浏览习惯和情绪状态推荐背景音乐,增强用户体验。 数据可视化:提供交互式的数据可视化面板,使非技术用户也能轻松理解复杂的数据集,从而做出更明智的决策。
三相与多相开绕组永磁同步电机仿真模型的先进控制策略探讨与实现,三相与多相开绕组永磁同步电机的Simulink仿真模型与先进控制策略研究,开绕组电机,开绕组永磁同步电机仿真模型、simulink仿真 共直流母线、独立直流母线,两相容错,三相容错控制,零序电流抑制,控制策略很多 三相开绕组永磁同步电机,六相开绕组永磁同步电机 五相开绕组永磁同步电机,五相开绕组电机 ,开绕组电机; 永磁同步电机仿真模型; simulink仿真; 共直流母线; 独立直流母线; 两相容错; 三相容错控制; 零序电流抑制; 控制策略; 六相开绕组永磁同步电机; 五相开绕组永磁同步电机,开绕组电机仿真研究:共直流母线与独立直流母线的容错控制策略
【毕业设计】基于Java的开发的网上汽车租赁管理系统_pgj
csv 模块是 Python 的标准库,无需额外安装。 运行结果如下图: ['姓名', '年龄', '城市'] ['张三', '25', '北京'] ['李四', '30', '上海'] ['王五', '22', '广州']
【毕业设计】基于Java+Springboot+Vue的宠物领养系统_pgj
让前端开发者学习“机器学习”!