Chinaunix首页 | 论坛 | 博客

14#

  • 博客访问: 177290
  • 博文数量: 48
  • 博客积分: 1910
  • 博客等级: 上尉
  • 技术积分: 445
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-27 10:38
文章存档

2012年(8)

2011年(2)

2010年(13)

2009年(25)

我的朋友

分类: Python/Ruby

2012-03-08 15:47:13

字符分类:

简单的模式

 

1.       正则表达式,在Perl 中通常被称为模式(pattern), 要匹配某个模式(正则表达式),可以将模式放在正斜线(//)之间

 

2.       正则表达式(regular expressions)是一种特殊语言写成的程序,内嵌于Perl 之中。

 

3.       我们将正则表达式看作一种由简单语言实现的程序,这种语言只有一个任务:查找某个字符串,返回匹配上(it matches)或者不匹配(it doesnot match),这就是它完成的所有工作。

 

4.       所有在双引号中的转义字符在模式中均有效,因此你可以使用/coke\tsprite/来匹配11 个字符的字符串coke, tab(制表符)sprite

 

5.       元字符前使用反斜线将使它变成普通的字符。如,模式/3\.14159/中的点(.)即不是通配符。这条规则对Perl 正则表达式中所有元字符均有效。

 

6.       (.)是通配符,它可以匹配任何单个的字符,但不包括换行符(\n)

 

7.       数量词(* + ?)必须紧跟在某些项的后面,因为它是指前面项重复的次数。

 

l         星号(*)表示匹配前一项0次或者多次

.*叫做“任意字符串匹配模式”,因为任意的字符串均能被匹配上(不包括换行符)

l         (+)的意思是可以匹配前面一项的一个或多个

l         问号(?),其含义是前面一个项出现一次,或者不出现

 

空格不是元字符 /fred +barney/意思是fred barney 之间由空格分开,且只能是空格

 

8.       模式中的分组

括号也是元字符,模式/(fred)+/能匹配上像fredfredfred 这样的字符串

 

9.       选择符竖线(|)

/fred( |\t)+barney/这样的模式,它将匹配fredbarney 以及中间由空格,制表符(tab),或者二者混合所组成的字符串。

如果希望fred barney 之间的字符是一样的,可以将模式写成/fred( +|\t+)barney/。在本例中,分隔符必须全是空格或者全是制表符。

单词and or 在正则表达式中不是操作符!它们在正则表达式中就是其本来的含义:单词and,or

 

字符类

字符类,是方括号[]中的一列字符,可以匹配上括号内出现的任意单个字符

 

1.       有时,指出没有被字符类包含的字符更加容易。字符类前使用符号^将取此字符类的补集。也就是说,[^def]]将匹配上这三个字符中之外的任意单个字符

 

2.       使用连字号(-)来表示某个范围的字母:

[^n\-z]将匹配上n, -, z 之外的任何字符。(连接符(-)前面使用反斜线的原因是,它在此字符类中有特别的含义(表示字符的范围)

/HAL-[0-9]+/中第一个连接符(-)前不需要反斜线,因为此时的连接符不会被理解为有特殊的含义。)

 

3.       字符类的简写

 

l         \d 任何数字的类,[0-9]

 

l         \w 被称作word字符:[A-Za-z0-9_] 请记住我们对word的定义,字母,数字,下划线组成

\w 不能匹配单词,而只能匹配单个字符。为了匹配整个单词,需要后接加号

/fred \w+ barney/

l         \s 对于匹配空白(whitespace)将非常方便。它等价于[\f\t\n\r ],其含5 个空白字符:格式符(form-feed);制表符(tab),换行符,回车,以及空格符。

同其它简写符号一样,\s 匹配此类中的单个字符,如果使用\s*将匹配任何个数的空白(包括没有),或者\s+匹配一个以上的空白(事    实上,很少见到单独使用\s,而不使用任何的数量词(*, +)

 

4.       简写形式的补集

 

l         某些时候,你可能希望得到这三种简写形式的补集。如果那样的话,你可以使用[^\d], [^\w], [^\s],其含义分别是,非数字的字符,非word(记住我们对word 的定义)的字符,和非空白的字符。也可以使用它们对应的大写形式:\D, \W, \S 来完成。它们将匹配它们对应的小写形式不能匹配上的字符。

 

l         这些简写形式可以在字符类中使用,或者在大的字符类中的中括号里面使用。

 

也就是说你可以使用/[\dA-Fa-f]+/来匹配十六进制(底为16)的数字

另一个类字符[\d\D],它的意思是任何数字,和任何非数字,则意指任何字符。这是匹配所有字符的一种通用方法,甚至包括换行符,而点(.)匹配除换行符以外的任何字符。而[^\d\D]则完全没用,因为它匹配既非数字也非非数字的字符,那什么也不是。

 

 

字符类中只有连接符-是特殊字符?字符类[]中的?*+ .不是特殊字符?

/\./ 等价 /[.]/

阅读(742) | 评论(0) | 转发(0) |
0

上一篇:SecureCRT 常用技巧

下一篇:没有了

给主人留下些什么吧!~~