Perl 学习笔记-正则表达式基础篇
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 学习笔记-正则表达式基础篇的更多相关文章
- Django学习笔记(基础篇)
Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html
- Python学习笔记之基础篇(-)python介绍与安装
Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...
- mysql学习笔记之基础篇
数据库学习之基础篇 ① 开放数据库互连(Open Database Connectivity,ODBC ② 结构化查询语言(Structured Query Language) ③ 进入mysql:M ...
- java学习笔记之基础篇
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
- Git学习笔记:基础篇
git可以说是所有开发者出开发语言之外的最基本的基本功了,熟悉git可以方便的进行代码版本控制,以及与其他开发者进行合作开发.本文内容是我以往学习git时做的笔记,主要是关于git最基本的操作,但 只 ...
- Scala学习笔记--正则表达式基础知识、如何在scala内使用
正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...
- PERL学习笔记---正则表达式的应用
使用m//匹配 //这是m//(模式匹配)的一种简写.同qw//操作一样,可以使用任何成对的分隔符.因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者 ...
- vue学习笔记之基础篇
本文主要记录学习vue的一些基础内容及常用知识点的记录. 1.搭建脚手架 vue init webpack vue-demo 初始化一个使用webpack打包的vue项目 npm install 安装 ...
- perl学习笔记——正则表达式
正则表达式 简单模式:匹配$_中的内容,只需要将模式写在一对斜线(/)中就可以了. 如:#!/usr/bin/env perl use 5.010; $_="yabba dabba doo& ...
- Python 学习笔记(基础篇)
背景:今年开始搞 Data science ,学了 python 小半年,但一直没时间整理整理.这篇文章很基础,就是根据廖雪峰的 python 教程 整理了一下基础知识,再加上自己的一些拓展,方便自己 ...
随机推荐
- jQuery给控件赋值....
1.jQuery给span取值:$("#id").html(); 2.jQuery给input取值:$("#id").val(); 3.jQuery给texta ...
- WebApi 返值的实体值前缀加了个下划线
发现MODEL类中加了个可以被序列化的标记,把它去除即可. [Serializable]
- CentOS 7 创建桌面快捷方式
一,在桌面新建一个文件 文件名随意,但必须带有.desktop的后缀名, 以Eclipse为例 vi /home/lenmom/Desktop/eclipse.desktop 其中: lenmom 是 ...
- Linux下sz下载文件超过4G办法
当下载文件超过4G时,sz提示能下载. 解决办法有以下几种: 1.scp 2.ftp 3.nc 4.icmp 5.文件切割 ---------------------------------- 以上4 ...
- ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open”的方法
在ubuntu系统终端下,用apt-get install 安装软件的时候,如果在未完成下载的情况下将终端中断,此时 apt-get进程可能没有结束.结果,如果再次运行apt-get instal ...
- ZooKeeper与仲裁模式
为了让服务器之间可以通信,服务器间需要一些联系信息.理论上,服务器可以使用多播来发现彼此,但我们想让ZooKeeper集合支持跨多个网 络而不是单个网络,这样就可以支持多个集合的情况. 为了完成这些, ...
- leetcode508
/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...
- c++可变参数(示例)
#include "stdafx.h" #include <stdarg.h> // 必须包含的头文件 #define ADD(int_params,...) Add( ...
- Adjacent Bit Counts(uvalive)
For a string of n bits x1, x2, x3,…, xn, the adjacent bit count of the string (AdjBC(x)) is given by ...
- Dreamweaver基本操作
1.站点管理 在网站设计前,我们需要先建立站点,再进行网站设计. 站点 作用:用来归纳一个网站上所有的网页.素材及他们之间的联系. 站点根文件夹命名规则:由数字.字母.下划线组成,数字不能在开头. 首 ...