Perl 正则表达式

匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)
替换:s/<pattern>;/<replacement>;/
转化:tr/<pattern>;/<replacemnt>;/
这三种形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整条语句中读作 does,"!~" 表示不匹配,在整条语句中读作 doesn‘t),并在左侧有待处理的标量变量。如果没有该变量和 =~ !~ 操作符,则默认为处理 $_ 变量中的内容。举例如下:

$str = "I love Perl";
$str =~ m/Perl/; # 表示如果在 $str 中发现 "Perl" 字符串,则返回 "1" 否则返回 "0"。
$str =~ s/Perl/BASH/; # 表示将变量 $str 中的 "Perl" 字符串替换为 "BASH",如果发生此替换则返回 "1",否则返回 "0"。
$str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母,如果转化发生了则返回 "0",否则返回 "1"。

string = "i:love:perl";
$string =~ s/:/*/; #此时 $string="i*love:perl";
$string = "i:love:perl";
$string =~ s/:/*/g; #此时 $string="i*love*perl"; 
$string =~ tr/*/ /; #此时 $string="i love perl"; 
$string = "www22cgi44";
$string =~ s/(\d+)/$1*2/e; # (/d+)代表 $string 中的一个或多个数字字符,将这些数字字符执行 *2 的操作,因此最后 $string 变成了 "www44cgi88"。

. 匹配除换行符以外的所有字符 
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字符 的字符串

范例 说明 
/perl/ 找到含有 perl 的字符串 
/^perl/ 找到开头是 perl 的字符串 
/perl$/ 找到结尾是 perl 的字符串 
/c|g|i/ 找到含有 c 或 g 或 i 的字符串 
/cg{2,4}i/ 找到 c 后面跟着 2个到 4个 g ,再跟着 i 的字符串 
/cg{2,}i/ 找到 c 后面跟着 2个以上 g ,再跟着 i 的字符串 
/cg{2}i/ 找到 c 后面跟着 2个 g,再跟着 i 的字符串 
/cg*i/ 找到 c 后面跟着 0个或多个 g ,再跟着 i 的字符串,如同/cg{0,1}i/ 
/cg+i/ 找到 c 后面跟着一个以上 g,再跟着 i 的字符串,如同/cg{1,}i/ 
/cg?i/ 找到 c 后面跟着 0个或是 1个 g ,再跟着 i 的字符串,如同/cg{0,1}i/ 
/c.i/ 找到 c 后面跟着一个任意字符,再跟着 i 的字符串 
/c..i/ 找到 c 后面跟着二个任意字符,再跟着 i 的字符串 
/[cgi]/ 找到符合有这三个字符任意一个的字符串 
/[^cgi]/ 找到没有这三个字符中任意一个的字符串 
/\d/ 找寻符合数字的字符,可以使用/\d+/来表示一个或是多个数字组成的字符串 
/\D/ 找寻符合不是数字的字符,可以使用/\D+/来表示一个或是更多个非数字组成的字符串 
/\*/ 找寻符合 * 这个字符,因为 * 在常规表达式中有它的特殊意思,所以要在这个特殊符号前加上 \ 符号,这样才会让这个特殊字符失效 
/abc/i 找寻符合 abc 的字符串而且不考虑这些字符串的大小写

正则表达式的八大原则
如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话,相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能,所以对字符串的处理能力非常强。在Perl语言的程序中,经常可以看到正则表达式的运用,在 CGI 程序设计中也不例外。

正则表达式是初学 Perl 的难点所在,不过只要一旦掌握其语法,你就可以拥有几乎无限的模式匹配能力,而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原则。

正则表达式在对付数据的战斗中可形成庞大的联盟——这常常是一场战争。我们要记住下面八条原则:

· 原则1:正则表达式有三种不同形式(匹配(m/ /),替换(s/ / /eg)和转换(tr/ / /))。

· 原则2:正则表达式仅对标量进行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 将把@array作为标量对待,因此可能不会成功)。

· 原则3:正则表达式匹配一个给定模式的最早的可能匹配。缺省时,仅匹配或替换正则表达式一次( $a = ‘string string2‘; $a =~ s/string/ /; 导致 $a = ‘string 2‘)。

· 原则4:正则表达式能够处理双引号所能处理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb扩展为变量;如果 $varb = ‘a‘ $a = ‘as‘,$a =~ s/$varb/ /; 等价于 $a =~ s/a/ /; ,执行结果使 $a = " s" )。

· 原则5:正则表达式在求值过程中产生两种情况:结果状态和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出现,$a =~ s/(word1)(word2)/$2$1/ 则“调换”这两个单词。

· 原则6:正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a =~ m/\w+/ 匹配一个或多个单词字符;$a =~ m/\d/" 匹配零个或多个数字。

· 原则7:如果欲匹配不止一个字符集合,Perl使用 "|" 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于“匹配字符串 cat 或者 dog。

· 原则8:Perl用 (?..) 语法给正则表达式提供扩展功能。

转载:http://www.cnblogs.com/cosiray/archive/2012/03/20/2408854.html

时间: 2024-10-05 05:05:39

Perl 正则表达式的相关文章

Perl正则表达式例子

Perl正则表达式 一.介绍 正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配:由于Nmap内嵌的服务与版本探测是使用的Perl正则规范,因此此篇博客记录一下Perl正则的相关内容,方便后期查阅. 二.Perl正则例子 下面的例子可能有不足之处,有些来源于博客,没有验证:1. 匹配IP地址:\d+\.\d+\.\d+\.\d+ \d:匹配一个数字字符,\d+:匹配一次或多次数字字符. \.:使用转义字符匹配'.'. 2. 匹配邮箱类似于[email protecte

老男孩带你了解perl正则表达式中的零宽断言

老男孩IT教育小编为大家整理了perl正则表达式中的零宽断言的方法,希望能帮到大家 1.1 前言 本文只介绍perl语言正则表达式的零宽断言功能. 零宽断言实质:匹配文本里面的位置. 零宽断言叫zero-length assertions,也叫lookaround(这个更容易理解). 包括:lookahead(向前看,零宽度正预测先行断言),lookbehind(向后看,零宽度正回顾后发断言). 从左到右对文本进行匹配,判断是否符合exp表达式. 名字 表达式 如果子表达式成功则- positi

&lt;摘录&gt;perl正则表达式中的元字符、转义字符、量词及匹配方式

Linux平台上被广泛使用的正则表达式库PCRE - Perl-compatible regular expressions,从其名字即可知道,PCRE提供的是一套与Perl中相兼容的正则表达式. 元字符(Meta-character) '\' : 在任何元字符前面加上反斜线,就会使它失去元字符的特殊作用.例如/3\.1415/这个模式里没有通配符 '^' : 匹配行首:在字符集中它是脱字符,表示求补集 '$' : 匹配行尾(或结尾处新行之前字符) '.' : 除新行(newline)外的任一字

Perl 正则表达式语法

1. 概要 Perl正则表达式是Boost.regex 默认行为,也可以将perl传入basic_regex 构造. boost::regex  e1(my_expression); boost::regex  e2(my_expression,  boost::regex::perl  |  boost::regex::icase); 2. 特殊字符 . [ { ( ) \ * + ? | ^ $ 3. 通配符 ‘ .’ 在字符集之外使用时可以匹配任意单字符,除了以下两种特殊情况: (1)NU

perl正则表达式第一周笔记

正则表达式基础 ^ 行首标志 $ 行末标志 如^cat$即一整行只有cat这个单词,^$则是一个空行 [  ] 字符组,用来匹配若干字符之一 如gr[ae]y,即grey或者gray - 在字符组内部,字符组元字符'-'(连字符)表示一个范围(前提是不在字符组开头) 如<H[123456]>和<H[1-6]>是一样的.而[0-9] [a-z] [A-Z]分别用于匹配所有数字.小写字母和大写字母,还可以写成多重范围[]0-9a-zA-Z] 注意,只有在字符组中,'-'才是元字符,其他

perl正则表达式第三周笔记

正则引擎的分类 正则引擎的分类 正则引擎的分类主要分两种: DFA:egrep.awk.lex.flex NFA:.NET.PHP.Perl.Ruby.Python.GNU Emacs.ed.sec.vi.grep等 NFA的历史比DFA久一点,但两种引擎都发展了20多年,产生了很多变体,POSIX的出现就是为了规范这种现象.POSIX不但规定了元字符的特性,而且规定了正则表达式应该用什么样的方式运作. DFA符合POSIX的标准,但NFA如果要符合POSIX标准,就要作出相应的修改 所以引擎可

perl正则表达式第二周笔记

1.使用正则表达式修改文本 1.使用正则表达式修改文本 正则表达式的功能不只有查询,还可以对文本进行修改,例如替换 $var=~m/regex/i $var=~s/regex/replacement/i Replacement两侧的斜杠相当于双引号,也就是说replacement中可以有$1,$2这样的变量来代表前面匹配到的内容 用$var=~s/regex/replacement/可以改变$var中的文本,如果没有匹配成功,就不会有文本的替换 $var=Jeff frield;$var=~s/

Perl:Perl正则表达式、循环和SHELL命令结合使用。

有一个实例,Perl从配置文件中读取一段pattern,这段pattern里有SHELL命令组合用于获取Linux的时事信息,整个pattern在获取SHELL命令返回值后才是完整的. Perl获取pattern后,执行SHELL组合,然后把结果替换string中原有的SHELL命令字符.如果SHELL命令不止一个.还需要循环来分别用正则表达式提取执行.替换.例如: #!/usr/bin/perl use strict; use warnings; $_='Today\'s Date is :

Perl正则表达式元字符

正则表达式元字符(metacharacter)是不代表自身原有含义的字符.它们拥有 以某种方式控制搜索模式的特殊能力(例如只在行首或行尾搜索模式,或只在以 大写或小写字母开头的行上搜索模式).如果在它们前面加上反斜杠(\),这 些元字符就会失去其特殊含义.例如,元字符点号(.)代表任何单个字符,但 如果在前面加上反斜杠,它就会退化为一个普通的点号或句号. 如果在元字符前面出现了反斜杠,这些反斜杠就会关闭元字符的特殊含义:但如 果在正则表达式中的其他数字或字母之前出现反斜杠的话,这些反斜杠则会拥有