一、用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 正则表达式之匹配的更多相关文章

  1. 前向否定界定符 python正则表达式不匹配某个字符串 以及无捕获组和命名组(转)

    [编辑] 无捕获组和命名组 精心设计的 REs 也许会用很多组,既可以捕获感兴趣的子串,又可以分组和结构化 RE 本身.在复杂的 REs 里,追踪组号变得困难.有两个功能可以对这个问题有所帮助.它们也 ...

  2. perl正则表达式第三周笔记

    正则引擎的分类 正则引擎的分类 正则引擎的分类主要分两种: DFA:egrep.awk.lex.flex NFA:.NET.PHP.Perl.Ruby.Python.GNU Emacs.ed.sec. ...

  3. perl正则表达式第二周笔记

    1.使用正则表达式修改文本 1.使用正则表达式修改文本 正则表达式的功能不只有查询,还可以对文本进行修改,例如替换 $var=~m/regex/i $var=~s/regex/replacement/ ...

  4. Perl正则表达式例子

    Perl正则表达式 一.介绍 正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配:由于Nmap内嵌的服务与版本探测是使用的Perl正则规范,因此此篇博客记录一下Perl正则 ...

  5. posix,perl正则表达式区别

    1.正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式.正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用来描述或者匹配一系列符合 ...

  6. Perl正则表达式超详细教程

    前言 想必学习perl的人,对基础正则表达式都已经熟悉,所以学习perl正则会很轻松.这里我不打算解释基础正则的内容,而是直接介绍基础正则中不具备的但perl支持的功能.关于基础正则表达式的内容,可参 ...

  7. Perl正则表达式引用

    正则表达式两篇: 基础正则 Perl正则 本文是对Perl正则的一点扩展,主要内容是使用qr//创建正则对象,以及一些其它的技巧. qr//创建正则对象 因为可以在正则模式中使用变量替换,所以我们可以 ...

  8. Perl正则表达式

    perl正则表达式就是通过一串特别设计的字符串,可以按照我们的需求匹配.替换.转化目标字符串.本文主要是对一些常用的正则表达以及语法的总结以及举例,供广大喜爱Perl的同学交流学习. 操作符: =~ ...

  9. Perl 正则表达式语法

    1. 概要 Perl正则表达式是Boost.regex 默认行为,也可以将perl传入basic_regex 构造. boost::regex  e1(my_expression); boost::r ...

随机推荐

  1. centos5.5 Apache2 Web 服务器的安装

    # vi /etc/httpd/conf/httpd.conf 把以下虚拟机的配置加在 httpd.conf  文件末尾即可 NameVirtualHost *:80               // ...

  2. 分享Grunt.js配置: watch + liveReload 实时监测文件变化自动刷新浏览器

    http://www.tuicool.com/articles/2eaQJn 用Grunt配置watch和liveReload组件,可以实时检测指定的文件变化并自动刷新浏览器.目前基本已经成为了我的必 ...

  3. iOS 程序开发

    准备 iOS 开发 之 编程知识点 iOS 程序调试 iOS 之 OC开发实战 iOS 架构模式 iOS 之 新功能.扩展

  4. 1.4.2.3. SETUP(Core Data 应用程序实践指南)

    初始化Core Data的三个方法: init,初始化托管对象模型.持久化存储协调器.托管对象上下文 - (id)init { ) { NSLog(@"Running %@ '%@'&quo ...

  5. apache 做负载

    首先说明一下,我感觉这种办法不太好,不能叫负载吧.不知道跳转到的服务器把数据返回给用户,还通不通过Apache的服务器,还有就是不能断点下载了 方法 1.打开httpd.conf  把如下模块前面的# ...

  6. js模块化开发——AMD规范

    这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就 ...

  7. C++中的输入参考

    1.输入输出 1)operator>> 参考:cplusplus.com Extracts characters from is and stores them in s as a c-s ...

  8. Java泛型的类型擦除

    package com.srie.testjava; import java.util.ArrayList; import java.util.List; public class TestGener ...

  9. ASP.NET 页面之间传值的几种方式

    开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...

  10. Kettle(Pentaho)实现web方式远程执行job或transformation

    一.背景 公司在用kettle做数据etl,每做完一个job或transformation发布上线想要立即执行看数据效果的话每次都是找运维同学登陆服务器打开kettle找到对应的文件点击执行,整个过程 ...