前几天用到了Perl语言,主要看了一下Perl中的正则表达式,在各种网页语言中,正则表达式在处理字符串的时候十分有用,所以这里就简单说一下在Perl中正则表达式的应用。

  先上代码

 #!/usr/bin/perl -w
#use utf8;
#use encoding "gb2312"; open(DATA,"<test2.txt") or die "read error"; open(OUT,">outfile.txt") or die "write error";
%array=();
while ($string =<DATA>){ if ($string =~ /s.*.m/) {
$string =~ s/s.*.m//g; }
chomp($string); #去掉换行符
foreach $character(split / /,$string){
if ($character =~ /\/d$/)
{
$array{$character}++;
}#code
}
}
print OUT "result:\n";
@character = sort {$array{$b} <=> $array{$a} }( keys %array);
foreach $character (@character){
print OUT "$character => $array{$character}\n";
}

  简单说一下就是,读取文件内容到字符串,去掉换行符,按空格分割(spilt),匹配到以s开头,以m结束的字符串,然后以空串替换之(删除),匹配到以d结束的字符串,存到数组中,最后按降序输出到文件。实际就是删除s开头,m结尾的单词,找到所有以d结束的单词,并统计。

  这里使用关联数组进行统计,可以使用任意标量(keys)作为索引值,便于以后检索。

  值得注意的是,*是贪婪匹配,它会尽可能地向后匹配直到匹配成功,要想尽可能少地匹配,需要

  

$string =~ s/s.*?.m//g

  

  正则表达式

  (1)三种形式

   匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)

  替换:s/<pattern>;/<replacement>;/

  转化:tr/<pattern>;/<replacemnt>;/

  这三种形式和“=~”或“!~”搭配使用,分别表示匹配和不匹配,在上述代码中用到了匹配符号。

(2)常用模式(pattern)  

. 匹配除换行符以外的所有字符

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字符 的字符串

abc 匹配含有 abc 的字符串

  在匹配中要注意转义字符的使用。正则表达式在处理字符时给我们提供很多便利,这里只是介绍了最简单的使用,并且发现字符串中隐含的模式进行匹配也是需要我们注意的,以后还要在使用中多多地学习。

Perl中的正则表达的更多相关文章

  1. 【转】SQL语句中的正则表达示

    正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较. MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据. MySQL仅支持 ...

  2. Perl中的正则表达式

    转自:http://c20031776.blog.163.com/blog/static/684716252013624383887/ Perl 程序中,正则表达式有三种存在形式 分别是 (1 模式匹 ...

  3. JS写法 数值与字符串的相互转换 取字符中的一部分显示 正则表达规则

    http://www.imooc.com/article/15885 正则表达规则 <script type="text/javascript"> </scrip ...

  4. Java正则表达中Greedy Reluctant Possessive 的区别

    Java正则表达中Greedy Reluctant Possessive 的区别 分类: java2015-01-16 00:28 1280人阅读 评论(9) 收藏 举报 正则表达式Java   目录 ...

  5. php 正则表达示中的原子

    原子 原子是正则表达示里面的最小单位,原子说白了就是需要匹配的内容.一个成立的正则表达示当中必须最少要有一个原子.大理石平台精度等级 所有可见不可见的字符就是原子 说明:我们见到的空格.回车.换行.0 ...

  6. shell正则表达

    shell正则表达 .*和.?的比较: 比如说匹配输入串A: 101000000000100 使用 1.*1 将会匹配到1010000000001,匹配方法:先匹配至输入串A的最后, 然后向前匹配,直 ...

  7. grep 正则表达

    常见的 grep 正则表达参数 -c # 显示匹配到得行的数目,不显示内容 -h # 不显示文件名 -i # 忽略大小写 -l # 只列出匹配行所在文件的文件名 -n # 在每一行中加上相对行号 -s ...

  8. Javascript正则构造函数与正则表达字面量&&常用正则表达式

    本文不讨论正则表达式入门,即如何使用正则匹配.讨论的是两种创建正则表达式的优劣和一些细节,最后给出一些常用正则匹配表达式. Javascript中的正则表达式也是对象,我们可以使用两种方法创建正则表达 ...

  9. perl中的grep函数介绍

    grep函数 (如果你是个的新手,你可以先跳过下面的两段,直接到 Grep vs.loops 样例这一部分,放心,在后面你还会遇到它) <pre>grep BLOCK LISTgrep E ...

随机推荐

  1. C#文件操作系列(一)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  2. UTF8 与 UTF16 编码

    Unicode 的发展,英文好的直接去 unicode.org 上去看吧,不好的可以移步到这里 看dengyunze的总结:<关于UTF8,UTF16,UTF32,UTF16-LE,UTF16- ...

  3. u-boot移植为tiny6410步骤

    1. 修改顶层Makefile文件 2. 修改arch/arm/cpu/arm1176/s3c64xx/cpu_init.S 3. 修改arch/arm/cpu/arm1176/s3c64xx/Mak ...

  4. GIT免密码PUSH

    摘自:dudu 备忘,感谢! 1. 在Windows中添加一个HOME环境变量,值为%USERPROFILE%,如下图: 2. 在“开始>运行”中打开%Home%,新建一个名为“_netrc”的 ...

  5. ie6/7/8中span右浮动折行问题的解决方案

    浮动标准: W3C CSS 2.1 规范文档里对于浮动元素与非浮动行内元素相邻时的情况有如下解释.以下是关键段落: A floated box is shifted to the left or ri ...

  6. [ImportNew]Java线程面试题

    Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关 ...

  7. 转: android studio 消除SDK更新时的“https://dl-ssl.google.com refused”错误

    消除了: hostname in certificate didn't match: 转: http://blog.csdn.net/gaojinshan/article/details/987160 ...

  8. asp.net下的b/s架构

    最近一直在做asp.net下的b/s架构的程序.整理一下可以采用的架构. 简单三层架构 基于接口和工厂模式的三层 前台用jquery调用http请求(ashx),ashx再调用逻辑接口 虽然很早就知道 ...

  9. 写代码的心得,怎么减少编程中的 bug?

    遭遇 bug 的时候,理性的程序员会说:这个 bug 能复现吗? 自负型:这不可能,在我这是好好的. 经验型:不应该,以前怎么没问题? 幻想型:可能是数据有问题. 无辜型:我好几个星期都没碰这块代码了 ...

  10. Ajax-jQuery实现

    load方法: 对上一篇中的javascript原生实现(数据格式为html),用jqury的post方法进行改造:  下面这句中“h2 a”,实现了对返回内容的选择:  $.get()\$.post ...