PERL学习笔记---正则表达式
要匹配某个模式(正则表达式)和$_的关系,可以将模式放在正斜线(//)之间,如下:
$_ =“yabba dabba doo”;
if(/abba/){
print “It matched!\n”;
}
表达式/abba/将在$_寻找这四个字母。如果找到,则返回true,在本例中,它出现了不止一次,但结果没什么不同。总之,
如果找到了,则匹配上;如果没找到,则没匹配上。
由于模式匹配通常返回true 或false,因此经常用在if 或while 的条件表达式部分。
所有在双引号中的转义字符在模式中均有效,因此你可以使用/coke\tsprite/来匹配11 个字符的字符串coke, tab(制表符),
sprite。
,点(.)是通配符,它可以匹配任何单个的字符,但不包括换行符(“\n”)。点(.)只匹配一个字符。、
反斜线是第二个元字符。如果需要真正的反斜线,需要重复使用两个反斜线。
。星号(*)表示匹配前一项0次或者多次。因此,/fred\t*barney/将匹配上fred 和barney
之间有任意个制表位(tab)的字符串。
如果希望包括不同的字符,怎么办呢?点(.)可以匹配任何单字符◆,因此.*将匹配任意字符任意多数。这就是说模式
/fred.*barney/将匹配fred,和barney 之间有任意多个任意字符(不含换行符)的字符串。任意行如果前面有fred,后面有barney,
其间为任意字符(字符串)都将匹配上。我们将.*叫做“任意字符串匹配模式”,因为任意的字符串均能被匹配上(不包括
换行符)。
星号的正是叫法是数量词(quantifier),意指其可以指代多个前面的项。它不是唯一的数量词,,加(+)也是。加(+)的意思是可
以匹配前面一项的一个或多个:/fred +barney/意思是fred 和barney 之间由空格分开,且只能是空格。(空格不是元字符)。
它不会匹配fredbarney,因为加(+)意指一个或多个,因此至少是一个。可以这样看待加(+):“最后一项,(可选的)至少还
有一项。”
还有第三个数量词,其限制性更强。它是问号(?),其含义是前面一个项出现一次,或者不出现。也就是说,前面这个项出
现1 次或者0 次,此外不会有其它情况。因此,/barm-?bamm/只匹配:bamm-bamm 或bammbamm。这很容易记住:“前面
的这个项,出现?或者不出现?”
模式中的分组:括号也是元字符。在数学中,括号(())用来表示分组
选择符: 竖线(|),在这种用法中通常被读作“或(or)”,意思是匹配左边的或者右边的。如果竖线左边没有匹配上,则匹配右边。因
此,/fred|barney|betty/将匹配出现过fred,或者barney,或者betty 的字符串
/fred( |\t)+barney/这样的模式,它将匹配fred,barney 以及中间由空格,制表符(tab),或者二者混合所组
成的字符串
字符类的简写
有一些字符类出现的非常频繁,因此提供了其简写形式。例如,任何数字的类,[0-9],可以被简写为:\d。因此,HAL 这
个例子可以被写作/HAL-\d+/。
\w 被称作“word’字符:[A-Za-z0-9_]。如果你的“words”由通常的字母,数字,下划线组成,那你将非常喜欢它。通常认
为“word”由字母,连接符(-),撇号(')◆组成,我们希望能改变这种定义◆。因此使用它,请记住我们对“word”的定义,
字母,数字,下划线组成。
◆至少,在英语中是这样。在其它语言中,其words 由不同的符号组成。查看perllocale 的帮助手册了解更多的信息。
◆当查看ASCII 编码的英语文本时,我们遇到单引号和撇号(')是相同字符的问题,因此很难说cat’是cat 和一个撇号( '),还是cat 后接单引
号。这可能是计算机还不能接管世界的一个原因。
当然,\w 不能匹配单词,而只能匹配单个字符。为了匹配整个单词,需要后接加号。模式/fred \w+ barney/将匹配fred,空
格,一个“单词(word)”,然后是空格和barney。因此,如果fred 和barney 之间有一个单词◆,由单个空格分隔开,它将
能匹配上。
◆我们将停止在word 上加引号;现在你已经知道其是由字母-数字-下划线组成的。
你可能已经注意到在前一例中,如果能更加灵活的匹配空白将很方便。\s 对于匹配空白(whitespace)将非常方便。它等价
于[\f\t\n\r ],其含5 个空白字符:格式符(form-feed);制表符(tab),换行符,回车,以及空格符。同其它简写符号一样,
\s 匹配此类中的单个字符,如果使用\s*将匹配任何个数的空白(包括没有),或者\s+匹配一个以上的空白(事实上,很少
见到单独使用\s,而不使用任何的数量词(*, +))。由于这些空白符看起来类似,因此可以使用这种简写形式,将它们统一处
理。
简写形式的补集
某些时候,你可能希望得到这三种简写形式的补集。如果那样的话,你可以使用[^\d], [^\w], 和[^\s],其含义分别是,非数
字的字符,非word(记住我们对word 的定义)的字符,和非空白的字符。也可以使用它们对应的大写形式:\D, \W, \S 来
完成。它们将匹配它们对应的小写形式不能匹配上的字符。
这些简写形式可以在字符类中使用,或者在大的字符类中的中括号里面使用。也就是说你可以使用/[\dA-Fa-f]+/来匹配十六
进制(底为16)的数字,它将ABCDEF(或者其小写形式)作为附加的数字(11 到15)。
另一个类字符[\d\D],它的意思是任何数字,和任何非数字,则意指任何字符。这是匹配所有字符的一种通用方法,甚至包
括换行符,而点(.)匹配除换行符以外的任何字符。而[^\d\D]则完全没用,因为它匹配既非数字也非非数字的字符,那什么
也不是
如果喜欢作者的文章,请关注"写代码的猿"订阅号以便第一时间获得最新内容。本文版权归作者所有,欢迎转载.
PERL学习笔记---正则表达式的更多相关文章
- PERL学习笔记---正则表达式的应用
使用m//匹配 //这是m//(模式匹配)的一种简写.同qw//操作一样,可以使用任何成对的分隔符.因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者 ...
- perl学习笔记——正则表达式
正则表达式 简单模式:匹配$_中的内容,只需要将模式写在一对斜线(/)中就可以了. 如:#!/usr/bin/env perl use 5.010; $_="yabba dabba doo& ...
- Perl 学习笔记-正则表达式处理文本
1.使用正则表达式替换文本 s/// s/<pattern>;/<replacement>;/ 如果匹配失败, 则什么也不会发生, 变量也不受影响. 返回布尔值, 替换成功 ...
- Perl 学习笔记-正则表达式基础篇
1.Perl中的正则表达式 在Perl中叫做模式, 是一个匹配(或不匹配)某字符串的模板, 是一种小程序, 对于一个字符串, 要么匹配, 要么不匹配. 使用简易模式: 将模式写在一对正斜线(/)中即可 ...
- perl学习笔记之:正则表达式
Perl 中的正则表达式 正则表达式的三种形式 正则表达式中的常用模式 正则表达式的 8 大原则 正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过 ...
- [Python学习笔记]正则表达式总结
常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...
- 小菜鸡的学习笔记---<正则表达式(1)>
正则表达式学习笔记(1) (纯新手学习笔记,大佬绕路 QAQ) 一.简介 正则表达式就是一种文本模式用来匹配一系列满足特定条件的字符串,可以对比一下数学里面的表达式,比如我们要用一个表达式表示一串数字 ...
- perl学习之正则表达式
9 Perl 中的正则表达式 正则表达式的三种形式 正则表达式中的常用模式 正则表达式的 8 大原则 正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很 ...
- Perl 学习笔记-正则表达式应用篇
1.以 m// 进行匹配 如: m/roger/ , /roger/ 是它的简写; 在说明 qw// 时可以选择使用任何成对的定界符, 对应m//匹配也可以, 如写成: m(roger) ...
随机推荐
- 文件上传--基于Spring MVC框架+SmartUpload
这篇文章是介绍文件上传的,由于在spring MVC上实现起来和直接在servlet中写有些不同,所以特地写了一下这篇文章,关于不同点,大家可以先阅读一下上一篇文章.好了,下面直接上代码. jab包是 ...
- React从入门到放弃之前奏(3):Redux简介
安装 npm i -S redux react-redux redux-devtools 概念 在redux中分为3个对象:Action.Reducer.Store Action 对行为(如用户行为) ...
- Ajax的工作原理以及优点、缺点 (汇总)
最近空闲时间,有朋友问我关于Ajax的工作原理,在这里我结合自己的工作经验和网上大佬的经验做一个总结,如有不足,请各位业内大佬指正 在我们了解Ajax之前,我们先来了解一下Javascript的执行原 ...
- BZOJ_4636_蒟蒻的数列_线段树+动态开点
BZOJ_4636_蒟蒻的数列_线段树+动态开点 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将 ...
- 挑子学习笔记:DBSCAN算法的python实现
转载请标明出处:https://www.cnblogs.com/tiaozistudy/p/dbscan_algorithm.html DBSCAN(Density-Based Spatial Clu ...
- 如何优雅地在 Spring Boot 中使用自定义注解,AOP 切面统一打印出入参日志 | 修订版
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
- Redis in .NET Core 入门:(2) String
第1篇:https://www.cnblogs.com/cgzl/p/10294175.html‘ 本文简单介绍一下Redis的常用数据类型String. 基本上都是文档上的内容,所以比较无聊.... ...
- Ubuntu命令用法详解——curl命令
简介: cURL(CommandLine Uniform Resource Locator)是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行.它支持文件上传和下载,所以是综合传输工 ...
- FreeSql 与 SqlSugar 性能测试(增EFCore测试结果)
这篇文章受大家邀请,与 SqlSugar 做一次简单的性能测试对比.主要针对插入.批量插入.批量更新.读取性能的测试: 测试环境 .net core 2.2 FreeSql 0.3.17 sqlSug ...
- Java的内存泄露
Java的内存泄露 1.静态集合类引起内存泄漏 像HashMap.Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们 ...