1.Perl中的正则表达式

  在Perl中叫做模式, 是一个匹配(或不匹配)某字符串的模板, 是一种小程序, 对于一个字符串, 要么匹配, 要么不匹配.

  使用简易模式: 将模式写在一对正斜线(/)中即可.

2.元字符

   .  匹配非换行符 \n 的任何单字符, 需要注意的是转义字符如  \t  算做一个字符. 匹配  .  应该使用  \.

   *  匹配前面的内容0次或多次, 使用  .* 表示匹配任意单字符任意次(这种模式也称为捡破烂模式)

   +  匹配前面的内容至少1次

   ?  匹配前面的内容至多1次

3.模式分组

  使用圆括号 () 来分组, 它也是一个元字符.

  分组可以实现反向引用, 如 \1 就是在使用第一个分组, \2 使用第二个分组 如:  /(.)\/ 表示匹配连续2个相同的字符, 使用  /(.)(.)\\/ 可以得到4个字符的回文串; 分组的依据是左括号从左到右的序号, 从1开始, 如连续4个字符回文串也可以写作 /((.)(.)\\)/

  分组编号的处理: Perl的原则是贪心取最大值,  所以\111 是第111号组, 如果只是想用\1, 而且在后面匹配字符"11",那就会冲突;  可以使用\g{N}来避免,  其中当N为正数时, 表示从左到右的第N个组,  当为负数时, 表示相对于当前从右往左数的第N个组.

4.选择匹配

  使用符号 |  , 只要在多个模式中有一个匹配即可, 由于一个模式要么匹配,要么不匹配, 一个字符串一般只匹配一个模式, 所以没有 类似于取反和求交集的逻辑操作.

5.字符集

  定义: 指一串可能出现的字符集合, 写在 [] 中表示, 它只匹配单个字符, 但是可以使字符集中的任何一个; 如  [a-cw-z]   [a-zA-Z0-9_]

  简写:  [-] <=> \d     [A-Za-z0-9_] <=> \w  [\f\t\n\r ] <=> \s #主要\r后面有一个空格

  反义简写:  [^\d] [^\w] [^\s] 分别表示非数字, 非单词字符, 非空白符; 对应等价于: \D  \W  \S

  注意:  ^ 在字符集中才表示反义简写, 但是在模式中表示开头, 结尾对应  $  , 如  /^perl/ 表示以perl开头的字符串

6.正则表达式使用

  匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)
  替换:s/<pattern>;/<replacement>;/
  转化:tr/<pattern>;/<replacemnt>;/

  符号:  =~  表示匹配,  !~  表示不匹配

$roger = "AABCDEF";
$Roger = "AABCDEF";
$count = $roger =~ tr/A/H/c; # /c表示将不匹配的字符替换, 同理有/d表示把所有匹配的字符全部替换
$count2 = $Roger =~ tr/A/H/; # 将匹配的字符替换,省略了/d 即: tr/A/H/d;
print $count."\t".$roger."\n"; #5 AAHHHHH
print $count2."\t".$Roger."\n"; #2 HHBCDEF
$roger = "AABCDEF";
$count = $roger =~ tr/A/H/ds; # /s表示要替换的字符串中如果持续连续两个相同字符,就去掉冗余的
print $count."\t".$roger."\n"; #2 HBCDEF

  2种用法:

$roger = "AABCDEF";
$count = $roger =~ tr/A//; # 等价于tr/A/A/; 统计模式出现的次数, 不会改变原串
print $count."\t".$roger."\n"; #2 AABCDEF
$count = $roger =~ tr/[A-Z]/[a-z]/; #替换成小写
print $count."\t".$roger."\n"; #7 aabcdef

  可以在替换的时候使用反向引用 s/(word1)(word2)/$$/  这样可以交换字符串的word1和word2,注意后面是$2 $1

Perl 学习笔记-正则表达式基础篇的更多相关文章

  1. Django学习笔记(基础篇)

    Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html

  2. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  3. mysql学习笔记之基础篇

    数据库学习之基础篇 ① 开放数据库互连(Open Database Connectivity,ODBC ② 结构化查询语言(Structured Query Language) ③ 进入mysql:M ...

  4. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  5. Git学习笔记:基础篇

    git可以说是所有开发者出开发语言之外的最基本的基本功了,熟悉git可以方便的进行代码版本控制,以及与其他开发者进行合作开发.本文内容是我以往学习git时做的笔记,主要是关于git最基本的操作,但 只 ...

  6. Scala学习笔记--正则表达式基础知识、如何在scala内使用

    正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...

  7. PERL学习笔记---正则表达式的应用

    使用m//匹配 //这是m//(模式匹配)的一种简写.同qw//操作一样,可以使用任何成对的分隔符.因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者 ...

  8. vue学习笔记之基础篇

    本文主要记录学习vue的一些基础内容及常用知识点的记录. 1.搭建脚手架 vue init webpack vue-demo 初始化一个使用webpack打包的vue项目 npm install 安装 ...

  9. perl学习笔记——正则表达式

    正则表达式 简单模式:匹配$_中的内容,只需要将模式写在一对斜线(/)中就可以了. 如:#!/usr/bin/env perl use 5.010; $_="yabba dabba doo& ...

  10. Python 学习笔记(基础篇)

    背景:今年开始搞 Data science ,学了 python 小半年,但一直没时间整理整理.这篇文章很基础,就是根据廖雪峰的 python 教程 整理了一下基础知识,再加上自己的一些拓展,方便自己 ...

随机推荐

  1. 阻塞队列之四:ArrayBlockingQueue

    一.ArrayBlockingQueue简介 一个由循环数组支持的有界阻塞队列.它的本质是一个基于数组的BlockingQueue的实现. 它的容纳大小是固定的.此队列按 FIFO(先进先出)原则对元 ...

  2. css移除a标签及map、area(图片热区映射)点击过后的边框

    默认a标签及其包含的html元素和map中的area(图片热区映射)在点击过后留有默认的蓝色边框,如下图 可以看到,蓝色的边框破坏了页面的整体美感,很多时候我们都是不需要的.通过设置相应的css可以去 ...

  3. JavaScript 数组some()和filter()

      some方法 array1.some(callbackfn[, thisArg]) 对数组array1中的每个元素调用回调函数callbackfn,当回调函数返回true或者遍历完所有数组后,so ...

  4. python学习 (三十) python的函数

     1: 函数参数默认值 def method1(p1 = , p2 = ): // 函数有两个参数,并且都有默认值 return p1 + p2 print(method1()) print(meth ...

  5. 卷积神经网络之AlexNet网络模型学习

    ImageNet Classification with Deep Convolutional Neural Networks 论文理解  在ImageNet LSVRC-2010上首次使用大型深度卷 ...

  6. FBVector

    folly/FBVector.h Simply replacing std::vector with folly::fbvector (after having included the folly/ ...

  7. 【翻译】用 Expression Blend 创建酷炫的 Button

    原文:Creating “Cool” Buttons with Expression Blend Author: Alex 在本文中,我们将考虑在Expression Blend用几种方法来创建酷炫的 ...

  8. Cinder Backup备份

    cinder 备份提供了三种驱动服务: Ceph,TSM,Swift 其中默认备份驱动服务为swift cinder 驱动服务的配置在cinder.conf文件中 backup_driver=cind ...

  9. 【nose入门】环境搭建

    http://blog.sina.com.cn/s/blog_65a8ab5d0101fihb.html 主要分为四个模块 一 环境搭建 二 demo测试 三 参数说明 四 注意事项 一  环境搭建 ...

  10. nginx的下载和安装

    安装 下载必要组件 nginx下载地址 http://nginx.org/en/download.html  pcre库下载地址,nginx需要[解析正则] http://sourceforge.ne ...