当前位置: 首页 > news >正文

Perl之正则表达式

  正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
  Perl语言的正则表达式功能非常强大,基本上是常用语言中最强大的,很多语言设计正则式支持的时候都参考Perl的正则表达式。
  Perl的正则表达式的三种形式,分别是匹配、替换和转化:
  匹配:m//(还可以简写为//,略去m)
  替换:s///
  转化:tr///
  这三种形式一般都和 =~ !~ 搭配使用, =~ 表示相匹配,!~ 表示不匹配。

1.匹配操作符

  匹配操作符 m// 用于匹配一个字符串语句或者一个正则表达式。
  例如,匹配标量str中的字符串”123”;

#! /usr/bin/perl
$str="正则表达式使用,匹配参数123,456,798!";
if($str=~"123")#=~表示相匹配
{printf("匹配成功\n");
}
else
{printf("匹配失败\n");
}

2.模式匹配修饰符

在这里插入图片描述

正则表达式变量
   perl处理完后会给匹配到的值存在三个特殊变量名:
   $`: 匹配部分的前一部分字符串
   $&: 匹配的字符串
   $': 还没有匹配的剩余字符串

示例:

#! /usr/bin/perl
$str="正则表达式使用,匹配参数123,456,798!";
print "原始字符串:$str\n";
if($str=~"123")#=~表示相匹配
{printf("匹配成功,匹配字符串之前内容:$`\n");printf("要匹配的字符串:$&\n");printf("匹配的字符串之后的内容:$'\n");
}
else
{printf("匹配失败\n");
}

不区分大小写示例:

#! /usr/bin/perl
$str="hello,welcomewByQ";
if($str=~/WBYQ/i) #i表示不区分大小写
{print "匹配成功,匹配字符串:$&\n";print "匹配前面字符:$`";
}

示例:

[wbyq@wbyq 0709]$ ./1.pl
匹配成功,匹配字符串:wByQ
匹配前面字符:hello,welcome

3.替换操作符

  替换操作符s///是匹配操作符的扩展,使用新的字符串替换指定的字符串。基本格式如下:
  格式:s/PATTERN/REPLACEMENT/;
  PATTERN 为替换内容
  REPLACEMENT 为要替换的字符串
  示例:

#! /usr/bin/perl
$str="hello,wbyq,welcome!";
print "$str\n";
$str=~s/wbyq/WBYQ/; #将"wbyq"替换为"WBYQ"
print "$str\n";

运行效果:

[wbyq@wbyq 0709]$ ./1.pl
hello,wbyq,welcome!
hello,WBYQ,welcome!

4.替换操作修饰符

  替换操作修饰符如下表所示:
在这里插入图片描述

5.转化操作符

  以下是转化操作符相关的修饰符:
在这里插入图片描述

#! /usr/bin/perl
$str="hello,welcomewByQ";
$str=~tr/a-z/A-Z/;#将所有的小写转换为大写
print "$str\n";
$str="hello,aaa,bbb,ccc,DDD";
print "原字符串:$str\n";
$str=~tr/a-z,A-Z//s; #将重复的字符删除
print "原字符串:$str\n";

运行效果:

[wbyq@wbyq 0709]$ ./1.pl
HELLO,WELCOMEWBYQ
原字符串:hello,aaa,bbb,ccc,DDD
原字符串:helo,a,b,c,D

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【数学建模】技术革新——Lingo的使用超详解
  • 基于Go1.19的站点模板爬虫
  • Vue2中的指令修饰符
  • Linux系统下weblogic10.3.6版本打补丁步骤
  • 最新版康泰克完整版- Kontakt v7.10.5 for Win和Mac,支持m芯片和intel,有入库工具
  • flutter 手写 TabBar
  • 鸿蒙开发:Universal Keystore Kit(密钥管理服务)【查询密钥是否存在(ArkTS)】
  • 东软医疗 踩在中国医疗科技跃迁的风口上
  • 【unity实战】使用unity制作一个红点系统
  • 文件安全传输系统,如何保障信创环境下数据的安全传输?
  • docker 安装 onlyoffice
  • CentOS 7 中出现 cannot open Packages database in /var/lib/rpm 错误
  • 最新PHP自助商城源码,彩虹商城源码
  • kettle从入门到精通 第七五课 ETL之kettle血缘,数据血缘
  • 【笔记】先求修改没保存的文本文件-在虚拟机中输入 yum makecache报错
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 分享的文章《人生如棋》
  • $translatePartialLoader加载失败及解决方式
  • 【个人向】《HTTP图解》阅后小结
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 03Go 类型总结
  • express如何解决request entity too large问题
  • go append函数以及写入
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • javascript 哈希表
  • opencv python Meanshift 和 Camshift
  • python大佬养成计划----difflib模块
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • TypeScript实现数据结构(一)栈,队列,链表
  • V4L2视频输入框架概述
  • 程序员最讨厌的9句话,你可有补充?
  • 从setTimeout-setInterval看JS线程
  • 分布式熔断降级平台aegis
  • 排序(1):冒泡排序
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 树莓派 - 使用须知
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​低代码平台的核心价值与优势
  • # dbt source dbt source freshness命令详解
  • #微信小程序:微信小程序常见的配置传旨
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (安卓)跳转应用市场APP详情页的方式
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (回溯) LeetCode 40. 组合总和II
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三)docker:Dockerfile构建容器运行jar包
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .net FrameWork简介,数组,枚举