perl 正则表达式之匹配
一、用m//进行匹配
上篇用双斜线的写法表示模式,事实上是m//的简写,所谓简写,就是当用双斜线作为定界符的时候,可有省略开头的m。
不使用简写的时候,可以使用任何定界符表示模式,m()、m<>、m!!等等
二、模式匹配修饰符
perl的模式匹配修饰符,有时也叫flag,是追加在模式表达式末尾定界符后面的字母,用来改变默认的行为
/i 进行大小写无关的匹配
/s 匹配任意字符,会将模式中的点号转换成字符集[\d\D]来处理,使其匹配任何字符,包括换行
/x 插入空白符,可有在模式中插入空白,perl会将空白和注释(注释部分别使用定界符)直接忽略,使用空白时,需要在前面加上反斜线,或使用\t、\s、\s+、\s*
/a 使用ASICC解释字符
/u 使用Unicode解释字符
/l 用本地化语言的设定来解释字符
/m 对多行进行匹配
其他修饰符可以参阅perlop中有关m//部分
组合选项时,只要将他们一起写在模式末尾
$_ = "I saw Barney \ndown at the bowling alley \nwith Fred\nlast night\n";
if(/Barney.*Fred/s){
print "has s yes \n";
}
if(/Barney.*Fred/){
print "no s yes \n";
}
三、锚位
通过给定锚位,让模式仅在字符串指定位置匹配
\A 匹配字符串的绝对开头
\z 匹配字符串 的绝对末尾
\Z 允许字符串后面有换行符
^ 在字符集外面时,表示字符串开头,无/m时,同\A
$ 字符串末尾
\b 单词边界符,这里的单词指由英文字母,数字,下划线组成的字符,即匹配一组连续的\w字符的开头或结尾
\B 非单词边界
$_ = 'http://www.baidu.com';
if(m{\AHttps?://}i){
print "yes \n";
}
$_ = 'that is a word boooo ';
if(/\bwor/){
print "1 \n";
} if(/\bwor\b/){
print "2 \n";
} if(/\bword\b/){
print "3 \n";
} if(/\bword\B/){
print "4 \n";
}
四、绑定操作符=~
默认匹配的操作对象是$_,绑定操作符使操作对象为操作符左边的字符串
正则表达式内部可以进行引号形式的内插
五、捕获变量
模式中出现圆括号的地方会触发正则表达的是引擎捕获匹配到的字符串,并保存在捕获变量中,即$1,$2。。。模式中有多少圆括号,就有多少捕获变量可以用
六、不捕获模式(?:)
七、命名捕获(?<LABLE>PATTERN)
捕获到的内容会保存在特殊哈希%+里,访问时用$+{LABLE}
反向引用\g{LABLE}或\k<LABLE>
my $name = 'Fred flintstone and Barney flintstone';
if($name =~ /(?<lastname>\w+) (?:and|or) \w+ \k<lastname>/){
print "i saw $+{lastname}\n";
}
八、自动捕获变量
$` $& $'
${^PREMATCH} ${^MATCH} ${POSTMATCH}
if('hello there, neighbor' =~ /\s(\w+),/){
print "that was ($`)($&)($') \n";
print "that was (${^PREMATCH})(${^MATCH})(${^POSTMATCH}) \n";
}
九、通用量词{m,n}
{0,} *
{1,} +
{0,1} ?
十、优先级
圆括号(分组或捕获) (...),(?:...),(?<LABLE>PATTEN...)
量词 a*,a+,a?,a{m,n}
锚位和序列 abc, ^,$,\A,\z,\Z
择一竖线 a|b|c
原子 a,[abc],\d,\1,\g{2}
perl 正则表达式之匹配的更多相关文章
- 前向否定界定符 python正则表达式不匹配某个字符串 以及无捕获组和命名组(转)
[编辑] 无捕获组和命名组 精心设计的 REs 也许会用很多组,既可以捕获感兴趣的子串,又可以分组和结构化 RE 本身.在复杂的 REs 里,追踪组号变得困难.有两个功能可以对这个问题有所帮助.它们也 ...
- perl正则表达式第三周笔记
正则引擎的分类 正则引擎的分类 正则引擎的分类主要分两种: DFA:egrep.awk.lex.flex NFA:.NET.PHP.Perl.Ruby.Python.GNU Emacs.ed.sec. ...
- perl正则表达式第二周笔记
1.使用正则表达式修改文本 1.使用正则表达式修改文本 正则表达式的功能不只有查询,还可以对文本进行修改,例如替换 $var=~m/regex/i $var=~s/regex/replacement/ ...
- Perl正则表达式例子
Perl正则表达式 一.介绍 正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配:由于Nmap内嵌的服务与版本探测是使用的Perl正则规范,因此此篇博客记录一下Perl正则 ...
- posix,perl正则表达式区别
1.正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式.正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用来描述或者匹配一系列符合 ...
- Perl正则表达式超详细教程
前言 想必学习perl的人,对基础正则表达式都已经熟悉,所以学习perl正则会很轻松.这里我不打算解释基础正则的内容,而是直接介绍基础正则中不具备的但perl支持的功能.关于基础正则表达式的内容,可参 ...
- Perl正则表达式引用
正则表达式两篇: 基础正则 Perl正则 本文是对Perl正则的一点扩展,主要内容是使用qr//创建正则对象,以及一些其它的技巧. qr//创建正则对象 因为可以在正则模式中使用变量替换,所以我们可以 ...
- Perl正则表达式
perl正则表达式就是通过一串特别设计的字符串,可以按照我们的需求匹配.替换.转化目标字符串.本文主要是对一些常用的正则表达以及语法的总结以及举例,供广大喜爱Perl的同学交流学习. 操作符: =~ ...
- Perl 正则表达式语法
1. 概要 Perl正则表达式是Boost.regex 默认行为,也可以将perl传入basic_regex 构造. boost::regex e1(my_expression); boost::r ...
随机推荐
- jQuery对象插件封装步骤
jQuery是js的一个非常优秀的库,它大大简化了js的很多操作,并且解决了js的大部分兼容性问题.甚至很多css兼容性问题,用jQuery写都能解决. 这里是对象插件的封装.当然,封装插件很多,这里 ...
- 开始Java学习(Java之负基础实战)
开发平台: JavaSE:java标准平台,一般用于桌面程序开发 JavaEE:开发web(如网站+Sping) JavaME:开发移动应用 开发环境: JVM:跨平台核心. JRE:java运行时, ...
- python 循环使用 while 或 for 语句实现用户名密码输错三次退出
如有错误欢迎大家指出,新手初来乍到.程序没那么复杂,是最简单的. 一.需求 编写登录文件 .py1. 输入用户名密码2. 正确,输出欢迎登录3. 当输入用户名和密码小于 3 次,输入用户名或者密码错误 ...
- @dynamic、@synthesize
声明property属性后,有2种实现选择: @synthesize 编译器期间,让编译器自动生成getter/setter方法. 当有自定义的存或取方法时,自定义会屏蔽自动生成该方法 @dynami ...
- 阿里云服务器windows系统C盘一键清理脚本
@ECHO OFF @echo @echo @echo 清理几个比较多垃圾文件的地方 DEL /F /S /Q "C:\WINDOWS\PCHealth\ERRORREP\QSIGNOFF\ ...
- Spring MVC 返回NULL时客户端用$.getJSON的问题
如果Spring MVC返回是NULL,那么客户端的$.getJSON就不会触发: 必须返回点什么东西: 如果返回的是一个字符串,客户端的$.getJSON也不会触发:把字符串 包装成List< ...
- 内存快照排查OOM,加密时错误方法指定provider方式错误引起的OOM
写在前面: 最近开始总结内存方面的东西,已经总结以前遇到的一些内存案例分享下,接下来还有几篇,然后是进程/线程相关的,逐渐形成我的知识体系树 如果你有兴趣,可以文章末尾的公众号二维码一起梳理这些信息. ...
- 设计模式之单一职责原则(SRP)
自己之前写过一些关于设计模式的博客,但是大部分都写得比较匆忙.现在正好趁年前有时间,笔者打算好好地整理一下自己这块知识结构.开篇的第一个原则就是设计原则里面最简单的一个原则--单一职责原则. 想必大家 ...
- ReentrantLock获取、释放锁的过程
看了篇文章,觉得分析得很透彻,其后总结的很到位,地址:http://www.iteye.com/topic/1083832 把获取与释放操作串在一起在简单看一下: 获取锁的时候将当前线程放入同步队列, ...
- SQL递归查询知多少
最近工作中遇到了一个问题,需要根据保存的流程数据,构建流程图.数据库中保持的流程数据是树形结构的,表结构及数据如下图: 仔细观察表结构,会发现其树形结构的特点: FFIRSTNODE:标记是否为根节点 ...