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 ...
随机推荐
- --@angularJS--独立作用域scope绑定策略之=符策略
1.index.html: <!DOCTYPE HTML><html ng-app="app"><head> <title>s ...
- JQuery的$.each(list,function(i,a){} 中 i和a 未定义,a取不到值
$.each(list,function(i,a){ var status = ""; if(a.status==0) status="未审核"; else i ...
- 在Cocos2d-x中实现较为真实的云彩效果
[前言] 这个效果是公司里上一个项目中用到的.因为项目已经死掉了,并且效果是我自己实现的,与其连着项目工程一起删掉,不如所以共产主义一下给大家作参考. 使用版本:cocos 2d-x 3.6(适用于所 ...
- Eclipse 输入出错时自动查找类
经常会只记得类的前半部分名称,这时可以双击这个没写完的类名,然后会弹出选择框:
- delphi edit编辑框使用
Delphi编辑框Edit的用法 http://wenku.baidu.com/link?url=oKKm0VFBXexqiWt9ZNB8WxFGzwjJqRBM3ohrAy6GSMmOmwIzSWP ...
- #图# #最大生成树# #kruskal# ----- OpenJudge 799:Heavy Transportation
OpenJudge 799:Heavy Transportation 总时间限制: 3000ms 内存限制: 65536kB 描述BackgroundHugo Heavy is happy. Afte ...
- cvc-complex-type.2.4.c: The matching wildcard...
在家里的电脑好好的,在单位的就不行,需要把web app libraties提到 最前面,然后clean一下项目
- Oracle to_char格式化函数 显示毫秒
racle如何显示毫秒 date类型只能精确到秒,要想精确到毫秒,需要使用timestamp类型. 应用举例: 举例1: select to_char(systimestamp,'yy ...
- 蓝桥网试题 java 入门训练 序列求和
---------------------------------------------------------------------------------------------------- ...
- 一篇文章搞定css3 3d效果
css3 3d学习心得 卡片反转 魔方 banner图 首先我们要学习好css3 3d一定要有一定的立体感 通过这个图片应该清楚的了解到了x轴 y轴 z轴是什么概念了. 首先先给大家看一个小例子: 卡 ...