正则表达式除了判断字符串是否匹配某个模式之外,也可以将匹配到的字符串进行替换.

1. 正则替换语法

  • 默认正则表达式只替换一次
  • 默认正则表达式返回替换的次数

1.1 简写语法

  • 简写方式就是对于内置变量$_ 进行正则替换操作
  • 简写方式常用语数组遍历中
  • 简写方式无须借助于绑定操作符 =~
# 设置内置变量的值
$_ = "hi,perl";# 对内置变量$_ 进行替换
s/hi/hello/;print "$_\n";

1.2 标准语法

# 定义普通字符串
$str = "hi,perl";# 对字符串进行替换
$str =~ s/hi/hello/;# 输出替换后的字符串
print "$str\n";

1.3 自定义定界符

正则替换也支持自定义定界符, 但是又有些不同,因为替换操作符需要用到三个符号。

  • 非成对的定界符: #匹配模式#替换内容#
  • 成对的定界符: {匹配模式}{替换内容}
# 定义普通字符串
$str = "http://www.baidu.com";# 对字符串进行替换
#str =~ s{http://}{https://};
$str =~ s#http://#https://#;# 输出替换后的字符串
print "$str\n";

2. 替换修饰符

2.1 正则修饰符

正则替换表达式除了支持/s,/i,/x 修饰符之外,还支持 g, r 修饰符

修饰符 含义 示例
i 忽略大小写 s/ab/cd/i, 可将ab,AB等替换为cd
s 默认元字符.无法匹配换行符\n, 添加s修饰后可匹配换行符 s/a.b/ab/s,可将aeb,a\nb 替换为ab
x 允许模式中添加空白符 可在模式中任何位置添加任意多个空白符,增加模式的可读性. 但是需要注意的是,匹配空白符需要使用\s
g 全局替换, 默认只替换匹配的第一个 s/l/L/g, 将所有的小写l替换为大写的L
r 不替换原字符串,返回替换的新字符串。默认替换原串,返回替换次数 $new = $str =~ s/l/L/r;

2.2 替换模式特殊符号

正则替换表达式除了支持正则匹配表达式中定义的元字符之外,还有一些额外的字符.

元字符 含义
$n n为1,2,3…, 标识匹配模式捕获的第n个结果
\l 首字符小写, 其后仅跟的第一个字符小写
\L 其后所跟全部字符小写
\u 首字符大写, 其后紧跟的第一个字符大写
\U 其后所跟所有字符大写

3. 返回结果

  • 对于正则替换, 默认返回替换的次数, 并会修改原字符串.
  • 对于添加修饰符/r的, 返回替换后的字符串, 不会修改原字符串

3.1 返回替换数量

$str = "hello,world";$cnt = $str =~ s/l/L/g;# 输出结果- 替换次数: 3, 原字符串:heLLo,worLd
print "替换次数: $cnt, 原字符串:$str \n";

3.2 返回新字符串

$str = "hello,world";$new = $str =~ s/l/L/gr;# 输出结果- 原字符串: hello,world, 新字符串:heLLo,worLd
print "原字符串: $str, 新字符串:$new \n";

4. 综合示例

4.1 正则返回全局替换次数

# 定义普通字符串
$str = "Hello, I am a good boy!";# 全局替换, 将小写o替换为大写O
$cnt = $str =~ s/o/O/g;print "替换次数: $cnt \n";
print "替换后内容: $str \n";

4.2 正则返回替换内容

# 定义普通字符串
$str = "Hello, I am a good boy!";# 正则替换, 不改变原串
$new = $str =~ s/Hello/hi/;print "原字符串: $str \n";
print "新字符串: $new \n";

4.3 正则大小写替换

# 定义普通字符串
$_ = "HELLO, I am a good boy!";# 匹配值, 首字母小写。 替换结果:hELLO, I am a good boy!
$str1 = s/(HELLO)/\l$1/r;# 匹配值, 全部小写。 替换结果:hello, I am a good boy!
$str2 = s/(HELLO)/\L$1/r;# 匹配值, 首字母大写。 替换结果:HELLO, I am a Good boy!
$str3 = s/(good)/\u$1/r;# 匹配值, 全部大写。 替换结果:HELLO, I am a GOOD boy!
$str4 = s/(good)/\U$1/r;

16. Perl 正则表达式-正则替换相关推荐

  1. 14. Perl 正则表达式-正则匹配

    正则表达式(regular expression) 在Perl 里面通常也叫模式(Pattern). 正则表达式是用来匹配或不匹配某个字符串是否符合特定字符串模板的,也可以实现字符串的替换. 1. 正 ...

  2. 15. Perl 正则表达式-正则捕获

    正则表达式在匹配过程中,可以通过小括号()对匹配内容进行捕获或分组. 1. 捕获变量 1.1 引用捕获变量 对于捕获变量的引用分为两种方式, 在匹配模式中, 和匹配模式外. 引用方式 含义 \n 匹配 ...

  3. python 正则式替换_python 正则表达式参数替换实例详解

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python ...

  4. vb.net 正则 替换 第n个_Python中正则表达式模块详解

    作者:python来源:SegmentFault 思否社区 正则表达式用来处理字符串,对字符串进行检索和替换,另外正则在python爬虫的应用也是相当广泛! 特点 灵活性.逻辑性和功能性非常强 可以迅 ...

  5. 在线正则表达式测试,正则替换工具

    在线正则表达式测试,正则替换工具 在线正则表达式测试,正则替换工具 本工具提供在线正则表达式的测试,支持替换,客户端实时计算,数据实时更新. https://tooltt.com/regex/

  6. php正则替换表情,求一正则表达式,替换某一规则的表情符号为表情图标(img表情)...

    求一正则表达式,替换某一规则的表情符号为表情图标( 表情) [高兴] 替换为 (用中文命名图片规不规范?) 其实最好还是用JS来比较好的. 回复讨论(解决方案) $str='[高兴]表情图片'; ec ...

  7. posix,perl正则表达式区别

    1.正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式.正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用来描述或者匹配一系列符合 ...

  8. Perl正则表达式讲解

    转载:http://blog.sina.com.cn/s/blog_607254630101cvx3.html 9.3.1 原则1 正则表达式有三种形式:匹配.替换和转换. 在表 9-1 中列有三种正 ...

  9. Perl 正则表达式

    Perl 正则表达式 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. Pe ...

最新文章

  1. scratch学习_学习scratch编程能学到什么?对孩子有帮助吗?
  2. DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏)
  3. Python基础:对象的深拷贝和浅拷贝的区别
  4. css之去除html标签默认的外边距margin和内边距padding,通用工具类 base.css
  5. SAP UI技术演进过程
  6. ASP.NET Core中间件初始化探究
  7. 大型Lambda的C# 泊松累积分布
  8. Maven 国内镜像
  9. jvm maxgcpausemillis 默认值_Tomcat和JVM的性能调优总结
  10. Camtasia 2021mac版
  11. 谈谈对三大框架的理解
  12. 音频功率放大器,250种功放电路图集锦,文件是JPG文件
  13. php的console.log,console.log()的作用
  14. ThreadPoolExecutor线程池 —————— 开开开山怪
  15. ECCV 2022 | MVDG:一种用于域泛化的统一多视图框架
  16. 计算机问卷调查数据分析报告,调查问卷分析报告怎么写
  17. Redis_17_Redis服务器中的数据库(五种基本类型底层存放)
  18. MiniFly微型四轴开发学习日志(一)——MiniFly 微型四轴软件原理
  19. oracle 结果集已耗尽_SQLException:耗尽结果集
  20. 【cartographer without ros】四、里程计odom数据转换

热门文章

  1. quickpcb添加pcb库_quickpcb2005详细步骤教程
  2. 【HDOJ】1005 Number Sequence_天涯浪子_新浪博客
  3. Arcgis10.1发布服务
  4. MySQL 修改默认值
  5. 20P19 Premiere 预设100种抽帧定格动画Pr预设模板片头
  6. abb机器人--示教器--基础认识
  7. (实用详细)快速入门北斗短报文RDSS协议/北斗协议
  8. Java实现--基于服务器的多用户聊天室
  9. markdown编辑简介
  10. 第一个Java程序:HelloWord