首页 技术 正文
技术 2022年11月14日
0 收藏 886 点赞 4,484 浏览 1591 个字

一、用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}

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,493
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295