注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

Perl中正则表达式查找,删除或替换字符串的方法  

2017-06-17 11:21:28|  分类: 服务器 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
大家都知道,Perl是一种对文本进行处理非常有效的语言,而正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务。
Perl 程序中,正则表达式有三种存在形式,他们分别是:
1)匹配:m/<regexp>/ 【可以简写为 /<regexp>;/ ,略去 m】
后面可加的选项描述如下:
g 匹配所有可能的模式 
i 忽略大小写 
m 将串视为多行 
o 只赋值一次 
s 将串视为单行 
x 忽略模式中的空白
2)替换:s/<pattern>/<replacement>/
后面可加的选项描述如下:
g 改变模式中的所有匹配 
i 忽略模式中的大小写 
e 替换字符串作为表达式 
m 将待匹配串视为多行 
o 仅赋值一次 
s 将待匹配串视为单行 
x 忽略模式中的空白
3)转化:tr/<pattern>/<replacemnt>/【这个很少用到】
后面可加的选项描述如下:
c 翻译所有未指定字符 
d 删除所有指定字符 
s 把多个相同的输出字符缩成一个
这三种形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整条语句中读作 does,"!~" 表示不匹配,在整条语句中读作 doesn't),左侧是待处理的标量变量。如果没有该变量和 =~ 或!~ 操作符,则默认为处理 $_ 变量中的内容。
这个大家应该都很熟悉的也就不多说了,然后是正则的常用模式:

. 匹配除换行符以外的所有字符
x? 匹配 0 次或一次 x 字符串
x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次数
x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次数
.* 匹配 0 次或一次的任何字符
.+ 匹配 1 次或多次的任何字符
{m} 匹配刚好是 m 个 的指定字符串
{m,n} 匹配在 m个 以上 n个 以下 的指定字符串
{m,} 匹配 m个 以上 的指定字符串
[] 匹配符合 [] 内的字符
[^] 匹配不符合 [] 内的字符
[0-9] 匹配所有数字字符
[a-z] 匹配所有小写字母字符
[^0-9] 匹配所有非数字字符
[^a-z] 匹配所有非小写字母字符
^ 匹配字符开头的字符
$ 匹配字符结尾的字符
\d 匹配一个数字的字符,和 [0-9] 语法一样
\d+ 匹配多个数字字符串,和 [0-9]+ 语法一样
\D 非数字,其他同 \d
\D+ 非数字,其他同 \d+
\w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
\w+ 和 [a-zA-Z0-9]+ 语法一样
\W 非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
\W+ 和 [^a-zA-Z0-9]+ 语法一样
\s 空格,和 [\n\t\r\f] 语法一样
\s+ 和 [\n\t\r\f]+ 一样
\S 非空格,和 [^\n\t\r\f] 语法一样
\S+ 和 [^\n\t\r\f]+ 语法一样
\b 匹配以英文字母,数字为边界的字符串
\B 匹配不以英文字母,数值为边界的字符串
a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串

这些跟其它语言也没有区别,接下来就是实战了,当然也是很简单的

#!/usr/bin/perl
$string = "i:love:www.593668.com";
print $string."==>";
$string =~ s/:/*/; #此时 $string="i*love:www.593668.com";
print $string."\r\n";
$string = "i:love:www.593668.com";
print $string."==>";
$string =~ s/:/*/g; #此时 $string="i*love*www.593668.com";
print $string."\r\n";
print $string."==>";
$string =~ tr/*/ /; #此时 $string="i love www.593668.com";
print $string."\r\n";
$string = "www.593668.com";
print $string."==>";
$string =~ s/(\d+)/$1*2/e; # (/d+)代表$string 中的一个或多个数字字符,将这些数字字符执行*2 的操作,因此最后$string 变成了 "www.1187336.com"。
print $string."\r\n";
$string = "www.593668.com\r\nwww.237h.com";
print $string."==>";
#包含换行(或回车)的字符串变成一行,并且每一行用空格分隔
$string=~ s/[\n\r]/ /g;
print $string."\r\n";

执行效果如下:
Perl中正则表达式查找,删除或替换字符串的方法 - sinsunson - 天朝布衣田中码农参上
这里的转义符和C很相似:

\n 换行
\r 回车
\t 水平制表符(Tab)
\b 退格
\e Esc (ASCII编码的转义字符)
\\ 反斜线
\" 双引号

搭配着以上的正规常用模式,基本上可以说,对字符串有如牛刀小试。至于其它语言也是可以借签,就不多费话了。
  评论这张
 
阅读(1)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017