基本概念
正则表达式是一种查找以及字符串替换操作。在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。正则表达式在文本编辑器中广泛使用,比如正则表达式被用于检查文本中是否含有指定的特征词、找出文中匹配特征词的位置、从文本中提取信息等等。
与文本编辑器相似,几乎所有的高级编程语言都支持正则表达式。
正则表达式一般就是由一些普通字符,和一些元字符组成。
普通字符:本身作为一个字符时,它不具有其他含义,像我们常用的大小写字母和数字。
元字符:除了本身作为一个字符外,他还可以表达其他含义。
元字符
符号 | 用法 | 示例 |
---|---|---|
. | 匹配除换行符以外的任意字符匹配字母或数字或下划线或汉字 | 例如 . 可以匹配 1,n,*,+,- ,等 |
\w | 匹配字母或数字或下划线或汉字 | a-z、A-Z、0-9、_、汉字 |
\s | 匹配任意的空白符 | ‘’ |
\d | 匹配数字 | 0-9数字 |
\b | 匹配单词的开始或结束 | \blove\b 匹配单词love |
^ | 匹配字符串的开始 | ^\d{8}$ 匹配8位数字的qq号 |
$ | 匹配字符串的结束 | ^\d{15}$ 匹配15位数字的手机号 |
反义符
符号 | 用法 | 示例 |
---|---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 | 匹配如 +,-,*等 |
\S | 匹配任意不是空白符的字符 | 如:1,* ,) |
\D | 匹配任意非数字的字符 | 如字母、汉字 |
[^x] | 匹配除了x以外的任意字符 | 如abc |
[^abc] | 匹配除了abc这几个字母以外的任意字符 | 如def |
限定符
符号 | 用法 | 示例 |
---|---|---|
* | 重复零次或更多次 | 例如:可能为空 或 任意数字 (2、3、4、5…) |
+ | 重复一次或更多次 | 例如:可能为1个或多个数字 1,23,234,2345,… |
? | 重复零次或一次 | 例如:可能为空或者任意的一个数字1,2,3,4… |
{n} | 重复n次 | \d{8}匹配重复8次数字 例如:123456768 |
{n,} | 重复n次或更多次 | \d{4,}匹配重复至少4次数字 例如:1234,12345,124244 |
{n,m} | 重复n到m次 | ^\d{8,11}$ 匹配重复8-11次数字 例如:12345678,123456789,1234567890 |
懒惰限定符
符号 | 用法 |
---|---|
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
其他符号
符号 | 用法 | 示例 |
---|---|---|
\ 引用符 | 表示转义 | 例如“\.”用来匹配点字符,而非任何字符的通配符 |
“或” 操作 | | 表示匹配结果是 | 左右其中一个 | ab|cd 表示匹配的结果是ab或者cd其中一个 |
方括号的使用 [] | 表示某些字符允许在一个字符串中某一个特定位置出现 | [ab] 表示一个字符串中有一个a 或 b |
小括号的作用 () | 表示分组检索 | ^(abc)+$ 表示 abc整体至少出现一次 |
常用的正则表达式公式
匹配汉字
^[\u4e00-\u9fa5]{0,}$
验证Email地址
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证电话号码
^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
验证身份证号(15位或18位数字)
^\d{15}|\d{18}$
匹配网址URL
^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?
匹配国内固话
\d{3}-\d{8}|\d{4}-\d{7}
匹配特定数字
^-?[1-9]\d*$ //匹配整数
^[1-9]\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*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
匹配日期
“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。
^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
匹配密码
包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。
^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
匹配IP-v4地址
\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b
匹配特定字符串
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个大写的英文字母组成的字符串
^[a-z]+$ //匹配由26个小写的英文字母组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串