用正则表达式处理文本

用s///进行替换

 m//意思是查找 而s///意思是查找并替换

#s///模式
s/需要匹配的/把匹配的替换的/

#用/g进行全局替换

=home,sweethome;s/home/cave/g;print _\n”; #输出结果为cave, sweet cave

 如缩减空白
   $_="pp  dd   aad   aad";
   s/\s+/ /g;
   print"$_";  #将任何连续空白转换为单一空格

#不同的定界符

s{ }{ };
s ;
s{ }[ ];

#可替换修饰符
除了修饰符/g,还可以使用匹配模式中的 /i /x /s 修饰符
联合使用无需无需关心前后顺序

s{ }{ }gi;

#绑定操作符

#无损替换
若既要替换前的字符串 又要替换后的字符串
(my copy= ori)=~s/ / /;

#大小写转换
转义符\U会把它后面所有字符转换成大写 \u会把它紧跟其后的第一个字符转换成大写
\L 所有 小写 \l 第一个 小写

#split操作符
给定模式拆分字符串

a=babbabbbabbbb;@part=split/a/, a; #得到”b”,”bb”,”bbb”,”bbbb”
split/ /中写成可匹配的模式

#join函数
$new=join 任意字符串,一串片段;

#列表上下文中的m//
比split更灵活
=saadve;my( a, b, c)=m/(\s+)(\s+)(\s+)/;
print” aisnext b”;

##更强大的正则表达式

#非贪婪量词
之前出现的四种量词 * + ? {} 都是贪婪量词
就是尽可能长得匹配

而非贪婪量词的写法是在四种贪婪量词后面加上问号?
即 *? +? ?? {}?
就是尽可能短得匹配

#跨行的模式匹配
传统的正则表达式仅用来匹配单行文本
而若要匹配多行文本
首先变量要写成
$_=”cwe\ncewc\ncwec\n”; #这就是一个三行文本

见第八章 ^ $ 都是表示字符串开头锚位和字符串结尾锚位  更严谨的绝对锚位是\A \z
而在后面加上m模式,就可以匹配每一行的头尾
如     
  print"我在行开头找到了字母c" if /^c/m;

#一次更新多个文件

#从命令行直接编辑——————————单行代码解决问题————————cmd?
假如要更新上百个文件,把里面拼错的Randall改为Randal
可以用单行代码一步完成

$ perl -p -i.bak -w -e 's/Randall/Randal/g' fred*dat

解析 
  perl表示用perl程序来处理随后的脚本

  -p选项自动生成小程序
  即
  while(<>){
    print;
    }

  -i.bak其作用是在程序运行前把$^I设为".bak"

  -w开启警告功能

  -e来告诉perl后面跟着的是可供执行的程序代码
  这段代码会放在之前生成的while循环中print的前面

  这一句操作可以等价以下程序
  #!/usr/bin/perl -w
  $^I=".bak".
  while(<>){
    s/Randall/Randal/g;
    print;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值