精通正则表达式--正则表达式入门示例拓展(2)总结笔记重点捕获型括号、环视字符
2017-10-12 18:09
701 查看
Perl中,
括号没有改变正则表达式意义,但把括号内的数据保存了下来。
捕获型括号:
非捕获型括号
用
可以用
环视不会占用字符,它只能寻找到能够匹配的位置。
查找和替换。格式和信息匹配类似
再来几个顺序环视的例子:要求把所有“Jeffs”替换为“Jeff’s”。不使用环视
这几种方式的比较:
三种表达方式比较:
匹配【Jeffrey】里面的【Jeff】
匹配右侧紧跟着是【s\b】的【Jeff】字符串
匹配左侧为【\b Jeff】右侧为【s \b】的字符位置
前两个正则表达式匹配的都是一个字符串,第三个匹配的是一字符个位置。
四种类型的环视
一次迭代完成时,下一次的迭代会在上一次匹配的终点开始尝试。使用顺序环视的意义在于,检查某个位置,单间差时匹配的字符并不算在(最终)“匹配的字符串”内。
$Fahrenheit和
$Celsius之类的普通变量一般以$开头,可以保存一个数值或者任意长度的文本。
if ($reply =~ m/^[0-9]+$/),
m/…/代表尝试进行“正则表达式匹配”。
=~用来连接正则表达式和待搜索的目标字符串,左侧返回值是true&false。
括号没有改变正则表达式意义,但把括号内的数据保存了下来。
$celsius =~ m/^[-+]?[0-9]+[CF]$/、
$celsius =~ m/^([-+]?[0-9]+)([CF])$/两个代码意义一样。
捕获型括号:
非捕获型括号
(?…),例如
$celsius =~ m/^([-+]?[0-9]+)([CF])$/,即使
[CF]两端的括号排在第三位,它匹配的文本也会保存在$2中,因为
(?…)不会影响捕获计数。
\b在正则表达式中匹配一个单词的分界符,但在字符组中,它匹配一个退格符。
用
\s匹配所有”空白”。
i称作修饰符,把它放在
m/…/结构之后,告诉Perl进行不区分大小写的匹配,不是正则表达式的一部分,是
m/…/结构的一部分。例如:
$input =~ m/^([-+]?[0-9]+(\.[0-9]+)?)\s+([CF])$/i
/g也是
m/…/结构的一部分,进行全局操作。不是正则表达式的一部分。
可以用
^/s*$检查空行。
.*通常用来表示“一组任何字符”,但其中会有陷阱。
环视不会占用字符,它只能寻找到能够匹配的位置。
(?=Jeffrey)Jeff和
Jeff(?=rey)是等价的。
查找和替换。格式和信息匹配类似
$var =~ m/rege x/,此格式为
$var =~ s/rege x/replacement/,如果正则表达式能够匹配$var中的某段文本,则将这段匹配的文本替换为replacement。
再来几个顺序环视的例子:要求把所有“Jeffs”替换为“Jeff’s”。不使用环视
s/Jeffs/Jeff's/g或更好的
s/\bJeffs\b/Jeff's/g,
\b为界符,不容易匹配到错误的单词。复杂些的表达式
s/\b(Jeff)(s)\b/$1'$2/g,简单的
s/\bJeffs\b/Jeff's/g,正则表达式表示方式
s/\bJeff(?=s\b)/Jeff'/g。
这几种方式的比较:
三种表达方式比较:
匹配【Jeffrey】里面的【Jeff】
匹配右侧紧跟着是【s\b】的【Jeff】字符串
匹配左侧为【\b Jeff】右侧为【s \b】的字符位置
前两个正则表达式匹配的都是一个字符串,第三个匹配的是一字符个位置。
四种类型的环视
一次迭代完成时,下一次的迭代会在上一次匹配的终点开始尝试。使用顺序环视的意义在于,检查某个位置,单间差时匹配的字符并不算在(最终)“匹配的字符串”内。
相关文章推荐
- 阅读笔记-精通正则表达式-第2章-入门示例及扩展-1
- 阅读笔记-精通正则表达式-第2章-入门示例及扩展-2
- 阅读笔记-精通正则表达式-第1章-正则表达式入门
- JavaScript学习笔记之——正则表达式总结
- 正则表达式 入门 -- 简单字符匹配、元字符
- 正则表达式学习笔记与经验总结
- Ruby学习笔记_正则表达式,获取系统时间,替换字符
- 正则表达式从入门到精通
- [正则]正则表达式 捕获型括号和非捕获型括号
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<正则表达式>(三十一)
- Perl语言入门笔记 第七章 漫游正则表达式王国
- 正则表达式知识详解之前后查找(环视) (java版示例)
- 精通正则表达式:1 正则表达式入门
- 《Linux Shell》笔记之grep与正则表达式(实例总结) 未完待续
- 自学笔记:正则表达式入门
- java 从零开始,学习笔记之基础入门<正则表达式>(三十一)
- Linux运维学习笔记-通配符及正则表达式知识总结
- ASP.NET验证控件学习总结与正则表达式学习入门
- Perl语言入门笔记 第九章 用正则表达式处理文本