正则表达式

来源:互联网 发布:果冻市场数据 编辑:程序博客网 时间:2024/05/20 13:07

看NLP的时候,里面有介绍正规表达式的,为了避免以后忘记,所以在这里做一个总结:

 

1 语法:

  1.1 元字符。

    . 匹配除 "/n" 之外的任何单个字符。要匹配包括 '/n' 在内的任何字符,使用象 '[./n]' 的模式。

    /  将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。 '/n' 匹配一个换行符。序列 '//' 匹配 "/" 而 "/(" 则匹配 "("。

 

    ^ 匹配字符串(一下简称ST)的开始位置。

    $ 匹配ST的结束位置。

 

 

  1.2 字符出现次数(一下均用a来代表该字符)

     a+ >=1次

     a* 任意次数

     a? 0或者1次

     a{n}  a出现n次

     a{n,} 至少n次

     a{n, m} >=n, <=m 次

 

  1.3 选择

      [a1a2] 表示从中选择一个字符

      [^a1a2]表示匹配非a1,a2的字符

      [A-Z]匹配从'A' 到 'Z'的字符

 

  1.4 分支

      a1|a2 匹配a1或者a2,这里a1,a2也可以使正则表达式。

 

 

  1.5 反向引用 (转自:http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm)

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

你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>/w+)(或者把尖括号换成'也行:(?'Word'/w+)),这样就把/w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用/k<Word>,所以上一个例子也可以写成这样:/b(?<Word>/w+)/b/s+/k<Word>/b

 

 

   1.6 其他转义

 

      /t  分页

      /w 等同于[0-9a-zA-Z_]

      /n  换行

      /s  空格

      ....

 

2 示例:

  e-mail:  /w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*

 

  还有一个带说明的转载自:http://topic.csdn.net/t/20040721/00/3194150.html

  国际域名格式如下:    
          域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成,  但开头及结尾均不能含有“-”,“-”不能连续出现   。  域名中字母不分大小写。域名最长可达60个字节(包括后缀.com、.net、.org等)。    
   
   
  /^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[/.][a-z]{2,3}([/.][a-z]{2})?$/i;  
   
  /内容/i   构成一个不区分大小写的正则表达式;  
  ^   匹配开始  
  $   匹配结束  
  [a-z]   E-Mail前缀必需是一个英文字母开头  
   
  ([a-z0-9]*[-_]?[a-z0-9]+)*   和_a_2、aaa11、_1_a_2匹配,和a1_、aaff_33a_、a__aa不匹配,如果是空字符,也是匹配的,*表示0个或者多个。  
  *表示0个或多个前面的字符.  
  [a-z0-9]*   匹配0个或多个英文字母或者数字  
  [-_]?   匹配0个或1“-”,因为“-”不能连续出现  
  [a-z0-9]+   匹配1个或多个英文字母或者数字,因为“-”不能做为结尾  
   
  @   必需有个有@  
  ([a-z0-9]*[-_]?[a-z0-9]+)+   见上面([a-z0-9]*[-_]?[a-z0-9]+)*解释,但是不能为空,+表示一个或者为多个。  
  [/.]   将特殊字符(.)当成普通字符  
  [a-z]{2,3}   匹配2个至3个英文字母,一般为com或者net等.  
  ([/.][a-z]{2})?   匹配0个或者1个[/.][a-z]{2}(比如.cn等)   我不知道一般.com.cn最后部份是不是都是两位的,如果不是请修改{2}为{起始字数,结束字数}.

 

 

 

原创粉丝点击