常用正则表达式全集

来源:互联网 发布:招聘php程序员要求 编辑:程序博客网 时间:2024/06/10 20:48

前几天讲java中提到了正则表达式,那今天就详细讲下,并总结些常用的。

正则表达式是一个强大的字符串处理工具,可以对字符串进行查找,提取,分割,替换等操作。

这里我用java来使用正则表达式来做例子,其实很多语言都支持,有些文本编辑器的查询也可以基于正则表达式,所以学正则表达式不是程序员的专利。大家可以利用下面例子做练习,eg

  1. public class TestReg {
  2.     public static void main(String[] args) {
  3.         Matcher m = Pattern.compile("//w+")
  4.                 .matcher("Java is very easy!");
  5.         while (m.find()) {
  6.             System.out.println(m.group());
  7.         }
  8.          System.out.println(m.matches());
  9.     }
  10. }

如不会代码的也可以打开editplus等文本编辑器,运行搜索,查询。

下面列举常用正则表达式:

匹配中文字符的正则表达式: [/u4e00-/u9fa5]

 

匹配空行的正则表达式:/n[/s| ]*/r

 

匹配HTML标记的正则表达式:/<(.*)>.*<///1>|<(.*) //>/

 

匹配首尾空格的正则表达式:(^/s*)|(/s*$)

 

匹配Email地址的正则表达式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*

 

匹配网址URL的正则表达式:http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?

 

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

匹配国内电话号码(匹配形式如 0511-4405222 或 021-87888822):/d{3}-/d{8}|/d{4}-/d{7}

 

匹配腾讯QQ号(腾讯QQ号从10000开始):[1-9][0-9]{4,}

 

匹配中国手机移动联通:/^((/(/d{3}/))|(/d{3}/-))?13/d{9}$

 

匹配中国邮政编码(中国邮政编码为6位数字):[1-9]/d{5}(?!/d)

 

匹配身份证(中国的身份证为15位或18位):/d{15}|/d{18} 大家可以注意下最后是x的情况 /d{15}|(/d{17}|(/d|x/X))   呵呵是看到过最后是x的,表示什么意思?

 

匹配ip地址:/d+/./d+/./d+/./d+ 更精确的  (?<![/d/.])((25[0-5]|2[0-4]/d|1/d{2}|[1-9]/d|/d)/.){3}(25[0-5]|2[0-4]/d|1/d{2}|[1-9]/d|/d)(?![/d/.])

 

匹配特定数字:
^[1-9]/d*$    //匹配正整数
^-[1-9]/d*$   //匹配负整数
^-?[1-9]/d*$   //匹配整数
^[1-9]/d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]/d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]/d*/./d*|0/./d*[1-9]/d*$   //匹配正浮点数
^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$  //匹配负浮点数
^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$  //匹配浮点数
^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$  //匹配非正浮点数(负浮点数 + 0)

 

匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^/w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

下面列举些正则表达式的常识知识:

常用的元字符
. 匹配除换行符以外的任意字符
/w 匹配字母或数字或下划线或汉字
/s 匹配任意的空白符
/d 匹配数字
/b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结

常用的限定符
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次


常用的反义代码
/W 匹配任意不是字母,数字,下划线,汉字的字符
/S 匹配任意不是空白符的字符
/D 匹配任意非数字的字符
/B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符


最后加个伤身体的正则表达式

匹配日期
(((^((1[8-9]/d{2})|([2-9]/d{3}))([-///._])(10|12|0?[13578])([-///._])(3[01]|[12][0-9]|0?[1-9]))|(^((1[8-9]/d{2})|([2-9]/d{3}))([-///._])(11|0?[469])([-///._])(30|[12][0-9]|0?[1-9]))|(^((1[8-9]/d{2})|([2-9]/d{3}))([-///._])(0?2)([-///._])(2[0-8]|1[0-9]|0?[1-9]))|(^([2468][048]00)([-///._])(0?2)([-///._])(29))|(^([3579][26]00)([-///._])(0?2)([-///._])(29))|(^([1][89][0][48])([-///._])(0?2)([-///._])(29))|(^([2-9][0-9][0][48])([-///._])(0?2)([-///._])(29))|(^([1][89][2468][048])([-///._])(0?2)([-///._])(29))|(^([2-9][0-9][2468][048])([-///._])(0?2)([-///._])(29))|(^([1][89][13579][26])([-///._])(0?2)([-///._])(29))|(^([2-9][0-9][13579][26])([-///._])(0?2)([-///._])(29)))((/s+(0?[1-9]|1[012])(:[0-5]/d){0,2}(/s[AP]M))?$|(/s+([01]/d|2[0-3])(:[0-5]/d){0,2})?$))

它可以验证
日期:是闰年的情况,一年只有12个月,一个月内有多少天(包括闰年)
时间:可以验证一天只有24小时、60分、60秒,AM、PM

 

原创粉丝点击