Perl语言入门(06+ 正则表达式)——小骆驼书正则表达式相关章节笔记

    由于公司需要,本人最近在学习Perl这种脚本语言,本文是我在学习Perl的过程中总结出来的一些心得和笔记,希望能够帮助也在学习Perl的各位同僚。废话不多说直接上干货!!!

————————————————————————— 干货分割线 ———————————————————————————


$str =~ /\p{Space}/ #有无空格

$str =~ /\p{Digit}/ #数字

if($str =~ /\p{Hex}/) #16进制数 0-9A-Fa-f

p改为P,上面表达式表示否定意义

 

元字符

.  :匹配任意一个字符,换行符除外

\

*: 匹配0或多次

.*:匹配任意字符0-无限次

+ :匹配1次以上

?:匹配0次或1

()

 

模式分组()

反向引用\1,\2

 

 

(.)\1 匹配连续出现的两个同样的字符。

 

$_ = “yabba dabba doo”;

/y(....) d\1/ 或者/y(.)(.)\2\1/ #匹配abba

$_=”aa11bb”

/(.)\g{1}11/ 或者g1 #g{N}N为组号

 

|:或匹配

 

 

 

字符集

放在[]中,他只匹配字符集中的单个字符,exp:[abcdefg] 只匹配一个

[a-zA-Z]

[\000-\177]:匹配任意一个7位的ASCII字符

脱字符^

[^def]:匹配除def以外的任何字符

[^\n-z]:匹配除了n,-,z以外的字符

字符集括号外面的连字符-没有特殊意义

\d :数字字符集 各种语言的数字

/a: 严格按照ASCII范围匹配数字字符时,(写在末尾)  /HAL-[\d]+/a

\s :匹配空白符,同\p{Spacs}

 

 

\R: 断行符  不管是\r\n或者\n都行

\w:单词字符

/s匹配任意字符,包括换行符

 

 

/x 可以在模式中添加空格,方便阅读

\s \s* \s+ 匹配空白符

/i 大小写无关

/a  ascii码方式

/u Unicode方式  【更宽泛】

/l遵从本地化语言设置

 

若使用两个a,进一步表示仅仅采用ascii方式的大小写映射处理

 

锚位

\A: 匹配字符串的绝对开头 ,/\Ahttp:/i   :是否以http:开头

\z: 匹配字符串的绝对末尾。 /\.png\z/i :是否以.png结尾

\Z 行末锚位,允许后面出现换行符

/\A\s*\Z/ :匹配空行【允许包含若干空白符,包括制表符和空格】

^:字符串开头锚位 /^barry/m

$:字符串结尾锚位 /fred$/m

$/m :对多行内容进行匹配

若无/m,^$的行为同\A,\z

\b单词[a-z,0-9,_]边界锚位\B /\bfred\b/ 可匹配fred 但不能匹配frederick,afred

 

不捕获圆括号(?:Perl正则表达式允许使用圆括号分组但不进行捕获,只是分组用

?四种用法:本身,数量可有可无,非贪婪匹配,放弃捕获

 

 #bronto只是起到匹配作用,并不想用来捕获,$1就可以捕获(|)了

If(/(?:bronto)?saurus (steak|burger)/){   

Print “Fred wants a $1\n”;

}

 

捕获内容直接命名 ?<LABEL>PATTERN

%+ :保存捕获组捕获到的内容 ,键即为捕获时用的特殊标签

My $names = ‘fred or barney’;

If($names =~ m/(\w+)(and |or)(\w+)/) #对比

If($names =~ m/(?<name1>\w+)(?:and | or)(?<name2>\w+)/){

Say “I saw $+{name1} and $+{name2}”; #输出捕获

}

 

 

\k<label> 等效于 \g{label}

 

 

不加()也能使用的捕获变量,保存在:$&$`$

If(“hello there,neighbor” =~ /\s(\w+),/){

Print “that actually matched ‘$&’”; #输出形式  there

}

$&保存的是【_there,

目标字符串保存在$1中:【there

目标字符串前的内容放在$`:  _

目标字符串后的内容放在$’:  ,

 

 

模式中的量词

* {0}】,+{1}】,?【{0,1}】,{}

/a{5,15}/ a出现20次只会匹配前15

 

 

/g可以让s///进行全局替换

删除开头结尾的空白

S/^\s+//  开头

S/\s+$//   结尾

或者 s/^\s+|\s+$//g  效率慢

不同定界符的写法:

 


 

 

 

\U将它后面的字符全部转义成大写

\L转成小写

\E关闭大小写转换

使用小写(\l,\u)只影响紧跟其后的第一个字符

 


非贪婪量词:+?,*?,{5,10}?,{8}?,??

/fred.+?barney/  匹配最少的字符串

 

$^I: 内置控制编辑器的值

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值