基本概念

摘自http://deerchao.net/tutorials/regex/regex.htm#negation

元字符

  • .匹配除换行符以外的任意字符

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

  • \s匹配任意的空白符

  • \d匹配数字

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

  • ^匹配字符串的开始

  • $匹配字符串的结束
    示例:

(1) \ba\w\b 匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w),最后是单词结束处(\b)
(2) \d+匹配1个或更多连续的数字
(3) \b\w{6}\b 匹配刚好6个字符的单词。
(4) ^\d{5,12}$ 匹配有5到12个字符的QQ

重复信息,表示0个到多个字符

  • *重复零次或更多次

  • +重复一次或更多次

  • ?重复零次或一次

  • {n}重复n次

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

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

字符类,表示一个字符

  • [0-9]表示一个0到9的数字,和\d同义

  • [a-z0-9A-Z_]表示一个数字或者大小写字母或者_

  • \(?0d{2}[)-]?\d{8}表示0个或者1个(,接着是一个0,接着是两个数字,接着是0个或者1个)或者-,最后是8个数字

分枝条件 |

匹配原理,从左至右,匹配成功之后就不会往后匹配
(1) 0\d{2}-\d{8}|0\d{3}-\d{7} 0开始两个数字,然后-,然后是8个数字;或者0开始之后三个数字,然后-,然后是7个数字
(2) \(?0\d{2}\)?[- ]?\d{8}|0\d{2}[-]?\d{8} 以0个或者1个(开始,然后是一个0,然后是两个数字,然后是0个或者1个),然后是8个数字;或者0开始,然后是两个数字,然后是0个或者1个-,然后是8个数字
(3) \d{5}-\d{4}|\d{5}

分组 ()

(1) (\d{1,3}\.){3}d{1,3} 粗略的匹配IP地址,首先1-3个数字加.重复三次,然后是1-3个数字
(2) ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) 精细的匹配IP地址,使用()|组合

反义

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

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

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

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

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

  • [^aeiou]匹配除了aeiou这几个字母以外的任意字符

常见正则表达式

  • 身份证 /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/

  • 邮件 /^\w+([\.-]?\w+)@\w+([\.-]?\w+)(\.\w{2,3})+$/

  • 邮件二 /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/;

  • ^(0|1-9*)$ 只能输入0和非0打头的数字

  • ^[-+]?\d+(\.\d+)?$ 只能输入实数


pengj
270 声望6 粉丝