正则表达式学习

正则表达式是由普通字符以及特殊字符(元字符)组成的文字模式,是记录文本规则的代码。

元字符

. :匹配任何单个字符

* :指定*前边的内容可以重复使用任意次以使整个表达式得到匹配

[] :匹配括号中的任何一个字符

\w :匹配字母、或数字、或下划线、或汉字

\s :匹配任意空白字符,包括空格、制表符(tab)、换行符、中文全角空空格等

\d :匹配数字

\b :匹配单词的开始或结束

^ : 匹配字符串的开始

$ : 匹配字符串的结束

例如:

比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$

 

字符转义

如果要找元字符本身,可以使用 \ 来取消这些字符的特殊意义

 

 重复--限定符

* :重复零次或更多次

+ :重复一次或更多次

? :重复零次或一次

{n} :重复n次

{n,} :重复n次或更多次

{n,m} :重复n到m次

 

分枝条件

分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法时用 | 把不同规则分隔开

如:0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)

 

反义

有时候需要查找不属于某个能简单定义的字符类的字符,比如想查找除数字之外的任意字符,这时需要用到反义

\W :匹配任意不是字母、数字、下划线、汉字的字符

\S :匹配任意不是空白符的字符

\D :匹配任意非数字的字符

\B :匹配不是单词开头或结束的位置

[^x] :匹配除了x以外的任意字符

[^auieo] :匹配除了auieo以外的任意字符

 

后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

其实,组号分配还不像我刚说得那么简单:

  • 分组0对应整个正则表达式
  • 实际上组号分配过程是要从左向右扫描两遍的:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有命名组的组号都大于未命名的组号
  • 可以使用(?:exp)这样的语法来剥夺一个分组对组号分配的参与权.

后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。难以理解?请看示例:

\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。

 

 贪婪模式与非贪婪模式

贪婪:尽可能的向后匹配

非贪婪:在+、.之后加?就变为非贪婪模式,然其后的匹配模式尽早的匹配

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2012-08-12 15:08  云起的自学笔记  阅读(167)  评论(0编辑  收藏  举报

导航