Perl中的正则表达

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

  先上代码

 1 #!/usr/bin/perl -w
 2 #use utf8;
 3 #use encoding "gb2312";
 4
 5 open(DATA,"<test2.txt") or die "read error";
 6
 7 open(OUT,">outfile.txt") or die "write error";
 8 %array=();
 9 while ($string =<DATA>){
10
11   if ($string =~ /s.*.m/) {
12     $string =~ s/s.*.m//g;
13
14   }
15   chomp($string);     #去掉换行符
16     foreach $character(split / /,$string){
17     if ($character =~ /\/d$/)
18     {
19         $array{$character}++;
20     }#code
21   }
22 }
23 print OUT "result:\n";
24 @character = sort {$array{$b} <=> $array{$a} }( keys %array);
25 foreach $character (@character){
26     print   OUT "$character => $array{$character}\n";
27 }

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

  正则表达式

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

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

时间: 2024-12-28 23:59:46

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

正则表达基础学习(一)

0x00写在前面: 不管是PHP.Python还是JAVA等编程语言,在使用字符串匹配过程中,正则表达匹配往往是首选.下面是个人总结的关于正则表达的基本知识.初学往往只是基础,关键在于实践. 0x01正则表达式 - 概述: 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子. 正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串.验证表单.提取字符串等等. 0x02正则表达式 - 基本匹配: 正则表达式其实就是在执行搜索时的格式,它由一些字母

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

上一篇文章<编程思想之正则表达式 >中讲了正则表达式的原理.使用方法和常见的正则表达式总结,本文将进一步探讨Java正则表达中Greedy.Reluctant.Possessive三种策略的区别. 从Java的官方文档http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html中我们可以看到,正则表达式表示数量词的符号有三套,分别是Greedy(贪婪的).Reluctant(勉强的)和Possessive(独占的).

php 正则表达示中的原子

原子 原子是正则表达示里面的最小单位,原子说白了就是需要匹配的内容.一个成立的正则表达示当中必须最少要有一个原子.大理石平台精度等级 所有可见不可见的字符就是原子 说明:我们见到的空格.回车.换行.0-9.A-Za-z.中文.标点符号.特殊符号全为原子. 在做原子的实例前我们先来讲解一个函数,preg_match: int preg_match ( string $正则 , string $字符串 [, array &$结果] ) 功能:根据$正则变量,匹配$字符串变量.如果存在则返回匹配的个数

正则表达示

这里对正则表达示进行一定程度的总结.为避免太过纠结,这里避开一些 鸡肋 的正则用法. 更多文档参考官方文档 http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html 字符 x 字符 x \\ 反斜线字符 \t 制表符 ('\u0009') \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') \f 换页符 ('\u000C') \a 报警 (bell) 符 ('\u0007') \e 转义

对正则表达这个东西还需要多练习啊

正则表达,如果不配合PHP语言来实现其他功能的话,充其量也就是一行字符串.它最基本的功能就是判断,用来判断某些字符是不是存在于一个已被定义的变量中. 所以,可以用它判断的这个特性来作为function的条件. 另外,正则表达式也具有增删改查的功能,但它最主要的功能就是"查". 最后:从某些方面来说,数据库也算是语言吧.

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

本文不讨论正则表达式入门,即如何使用正则匹配.讨论的是两种创建正则表达式的优劣和一些细节,最后给出一些常用正则匹配表达式. Javascript中的正则表达式也是对象,我们可以使用两种方法创建正则表达式: 使用new RegExp()构造函数 使用正则表达字面量 先说结果,使用正则表达字面量的效率更高. 下面的示例代码演示了两种可用于创建正则表达式以匹配反斜杠的方法: 1 //正则表达字面量 2 var re = /\\/gm; 3 4 //正则构造函数 5 var reg = new RegE

ruby正则表达

1.Ruby中正则表达式的写法 主要有三种 在//之间,要进行转义 在%r{}内,不用进行转义 Regexp.new()内,不用进行转义 /mm\/dd/,Regexp.new("mm/dd"),%r{mm/dd}三者效果相同,实质都是新建了一个Regexp的类. 2.匹配的两种方法 =~肯定匹配, !~否定匹配.=~表达式返回匹配到的位置索引,失败返回nil,符号左右内容可交换 regexp#match(str),返回MatchData,一个数组,从0开始,还有match.pre_m

bash中的正则工具几种引用方式的区别

在平时大量的日志数据分析时候,我们就会大量的使用正则表达式用来配合平时写的脚本来带来需要的效果,而在使用正则表达式工具的时候都是在需要在引用中,在平时我们的引用一般有3中,分别是:双引号("").单引号('').反引号(``). 其中最后一种和前2种区分还是比较简单的,反引号(``)的引用在bash中一般是用来做参数展开,用于获取最后参数运算后的结果用的,而双引号("").单引号('')这2种区别还是有点不好区分的,记得以前还有朋友来问过我,在这里就简单的说一下,从

通过完善邮箱匹配来一步步学习正则表达

首先,在学习之前先确定一下邮箱的格式,邮箱的一般格式为[email protected],其中xxx可为数字.字母.下划线_,中划线-,点号.,加号+等组成. 在看具体代码之前需要先了解一些基础知识 # []表示匹配字符集中的任意一个字符# \w 表示匹配任何字母数字字符# \s表示任何空格字符# \d表示任何十进制数字# +表示匹配1次或多次前面出现的正则表达# *表示匹配0次或多次前面出现的正则表达# (?:)表示一个匹配不用保存的分组 1.匹配最简单的邮箱格式,如[email protec