正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)

正则表达式是对字符串操作的一种逻辑公式

一、正则表达式构造摘要

1、字符类

1
2
[abc]`:肯定,`a`、`b` 或 `c
[^abc]`:否定,除了 `a`、`b` 或 `c

[a-zA-Z]:范围,azAZ,两头的字母包括在内

2、预定义字符类

.:任何字符(与行结束符可能匹配也可能不匹配)

1
2
3
4
5
6
\d`:数字,`[0-9]
\D`:非数字, `[^0-9]
\s`:空白字符,`[ \t\n\x0B\f\r]
\S`:非空白字符,`[^\s]
\w`:单词字符,`[a-zA-Z_0-9]
\W`:非单词字符,`[^\w]

3、POSIX 字符类(仅 US-ASCII)

\p{Lower}:小写字母字符,[a-z]

\p{Upper}:大写字母字符,[A-Z]

\p{ASCII}:所有ASCII,[\x00-\x7F]

\p{Alpha}:字母字符,[\p{Lower}\p{Upper}]

\p{Digit}:十进制数字,[0-9]

\p{Alnum}:字母数字字符,[\p{Alpha}\p{Digit}]

\p{Punct}:标点符号,[!”#$%&’()*+,-./:;<=>?@[]^_`{|}~]

\p{Blank}:空格或制表符,[ \t]

4、边界匹配器

^:行的开头

$:行的结尾

5、Greedy数量词

X?X,一次或一次也没有

X*X,零次或多次

X+X,一次或多次

X{n}X,恰好 n

X{n,}X,至少 n

X{n,m}X,至少 n 次,但是不超过 m

6、Logical运算符

XYX 后跟 Y

X|YXY

(X):X,作为捕获组

7、特殊构造(非捕获)

(?:X) X,作为非捕获组

(?=X) X,通过零宽度的正 lookahead

(?!X) X,通过零宽度的负 lookahead

(?<=X) X,通过零宽度的正 lookbehind

(?<!X) X,通过零宽度的负 lookbehind

(?>X) X,作为独立的非捕获组

二、常见的正则表达式示例

  • 验证用户名和密码,要求第一个字必须为字母,一共6~16位字母数字下划线组成:(^\w{5,15}$)
  • 验证电话号码xxx/xxxx-xxxxxxx/xxxxxxxx:(^(\d{3,4}-)\d{7,8}$)
  • 验证手机号码:( ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$ )
  • 验证身份证号: ( \d{15}$)|(^\d{18}$)|(\d{17}(\d|X|x)$)
  • 验证Email地址:(^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$)
  • 只能输入由数字和26个英文字母组成的字符串:(^[A-Za-z0-9]+$)
  • 整数或者小数:(^[0-9]+(.[0-9]+){0,1}$)
  • 中文字符的正则表达式:([\u4e00-\u9fa5])
  • 金额校验(非零开头的最多带两位小数的数字):(^([1-9][0-9]*)+(.[0-9]{1,2})?$)
  • IPV4地址:(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5])).){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))