寒假【perl语言学习脚本】8.1 8.2 8.3 8.4 8.5 8.6

该博客围绕Perl语言中的正则表达式展开,介绍了多种匹配规则,如字符类(单字符与数字、空白字符、锚定字符、重复字符等)的匹配方式,还提及了print、printf和say的区别,以及绑定操作符、捕获变量等内容,帮助理解Perl正则匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

#!/usr/bin/perl -w
while($_=)
{
if(/match/)
{
print "It is matched: ‘&lt;`&lt;<&>KaTeX parse error: Expected 'EOF', got '\n' at position 2: '\̲n̲";#自动捕获变量,&, $, $' } } #匹配到的结果放到$&里,匹配区段之前的内容会存到$里,而匹配区段之后的内容则会存到$'里,将三者依次连接

#若模式匹配的对象是$_的内容,只要把模式写在一对斜线(/)中就可以了,而模式本身就是一串简单的字符序列

if(/abba/){

print “it is matched!\n”;

}

#print和printf的区别?
#printf:可以自定义输出的模式,另外输出内容之后不自动换行
#print:输出内容之后自动换行,print 中不能使用%s ,%d 或%c;
#和say区别?都是打印,say自动加换行符
#say “hello”
#print “hello\n”
#是一样的,say方便不少,只是简单打印的时候不需要print \n

#正则匹配返回1,不匹配返回0
#+就表示重复0或多次 /world+/-----worlddddd
#/(world)+/------worldworldworld
#括号内的内容作为元字符,用反斜线后面加数字表示再次匹配:/(world)\3/表示匹配:worldworldworldworld共四次—反斜线和数字编号组成的
#/(hello)(world)\1\2/按前后顺序决定,匹配的应该是helloworldhelloworldworld
#/(hello) we love the (world)\2\2,it is a string/)匹配的-------hello we love the world,hellohelloworldworld

#择一匹配 |
在这里插入图片描述

#!/usr/bin/perl -w
while($= ){
chomp;
if (/a\b/)
{
print "it is matched: ‘&lt;`&lt;<&>KaTeX parse error: Expected 'EOF', got '\n' at position 2: '\̲n̲"; } } #绑定操作符=…
,绑定操作符告诉perl,拿右边的模式来匹配左边的字符串,而不是匹配KaTeX parse error: Expected group after '_' at position 1: _̲ #任何一个本地设定的字符编码…!";
while(defined(KaTeX parse error: Expected '}', got '#' at position 12: _=<FILE>)){#̲逐行读取文本 if (_=~ /(\w*a$)/){# +用于使前面的字符与后面的字符至少匹配一次,也可以任意次地进行匹配
print “it is matched: ‘&lt;`&lt;<&>$’”;
}
}
close FILE;

在这里插入图片描述

#!/usr/bin/perl -w
while()
{
chomp;
if($_ =~ /(\b\w*a\b)/ )#此处的模式在括号内使用一对\b单词边界锚位
{
print “It is Matched: ‘&lt;`&lt;<&>$’\n”;
print “$1 contains ‘$1’\n”;
}
else
{
print “No match: $_\n”;
}
}

#元字符
#字符类:单字符与数字

*----任何非空字符

.--------- 匹配任何除换行符外的任意字符 代表的是一个

[a-z0-9]—匹配集合中任意单个字符

[^a-z0-9]—匹配不在集合中才任意单个字符

\d-----匹配单个数字

\D----匹配非数字字符,等效于[^0-9]

\w----匹配数字型(字)字符 类似小d

\W----匹配非数字型(非字)字符 类似大D

#字符类:空白字符

\s 匹配空白字符,如空格,制表符和换行符

\S 匹配非空白字符

\n 匹配换行符

\r 匹配回车符

\t 匹配制表符

\0匹配空值字符

#字符类:锚定字符

\b 匹配字边界(不在[]中时)

\B 匹配非字边界

^ 匹配行首

$ 匹配行尾

\A 匹配字符串开头

\Z 匹配字符串或行的末尾

\z只匹配字符串末尾

\G 匹配前一次m//g

#字符类:重复字符

x? 匹配0或1个x

x* 匹配0或多个x

x+ 匹配1或多个x

x(m,n) 匹配m到n个x组成的值

#字符类:其他字符

\e 匹配ASCII

在这里插入图片描述

#!/usr/bin/perl -w
use 5.010;
while()
{
chomp;
if(/(?\b\w*a\b)/)#不捕获模式 ?: A named capture group:一个命名的捕获组(?pattern) \b 匹配字边界
{
print “Matched: |‘&lt;`&lt;<&>KaTeX parse error: Expected 'EOF', got '\n' at position 3: '|\̲n̲"; print "'wo…+{word}’\n”; #新的输出行
}
else
{
print "No match: |KaTeX parse error: Expected 'EOF', got '\n' at position 3: _|\̲n̲"; } } #官方网址:…+是最近的捕获组,KaTeX parse error: Expected 'EOF', got '#' at position 13: +{xxx}是引用组名 #̲\w是你要匹配的东西 #自动捕…&里,匹配区段之前的内容会存到‘里,而匹配区段之后的内容则会存到`里,而匹配区段之后的内容则会存到’里

#捕获变量的一些问题
#if(/(?:bronto)?saurus(steak|burger)/)#?:告诉bronto的圆括号只是为了分组才存在的,那么存在$1中的就是第二个括号里的steak|burger
#为了避免记忆KaTeX parse error: Expected 'EOF', got '#' at position 55: …内容会保存在特殊哈希%+里面 #̲其中的键就是在捕获时用的特殊标…+{name1}和$+{name2}
#?的作用是:去除+的贪婪模式
在这里插入图片描述

#!/usr/bin/perl -w
use 5.010;
while()
{
chomp;
if(
m!
(\b\w*a\b)
(.{0,5})
!x
)#此处的模式在括号内使用一对\b单词边界锚位
{
say “$1 $2”;
}
}

#$1: 某个以字母a结尾的英文单词
#$2: 后面接上的字符不超过5个
#/x和/s修饰符 s 匹配空白字符,如空格,制表符和换行符, x 忽略模式中的空白,允许在模式里加入空白符
#/x 在模式里随意加入空白,使其更易阅读

#perl里大部分标点符号是不算作单词的
#任意字符出现0-5次,五位及以下的任意字符串

#s
#Treat the string as single line. That is, change “.” to match any character whatsoever, even a newline, which normally it would not match.
#将字符串视为单行。也就是说,改变“.”匹配任何字符,甚至是换行符,通常它不匹配
#x
#单个/ x告诉正则表达式解析器忽略大多数空格,这些空格既不是反斜杠也不是在括号内的字符类中。您可以使用它将正则表达式分解为更易读的部分。
在这里插入图片描述

#!/usr/bin/perl -w
while(<>)
{
chomp;
if(/\s\z/)
{
print “$_#\n”; #井号在这里用作标示字符,表示行尾的位置。
}
}

\s 匹配空白字符,如空格,制表符和换行符

\z只匹配字符串末尾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值