本文介绍了正则表达式的基础知识及常用表达式
直接匹配
也就是和正常搜索一样,直接输入一个字符串。正则表达式会对我们输入的字符串进行全文匹配。例如:
-
aeiou
✔ aeiou
✔ fskaeiouvd
❌ aeiuo
❌ eiou
❌ aetiou
范围匹配
我们使用方括号 []
进行范围匹配,正则表达式会匹配到方括号中的任一一个字符。例如:
-
[aeiou]
✔ e
✔ tia
❌ s
❌ sdfg
多个方括号并排则依次匹配。例如
-
[aeiou][aeiou]
✔ uu
✔ ea
✔ tia
❌ e
❌ as
-
[aeiou][sdfg]
✔ us
✔ sus
❌ su
-
a[aeiou]
✔ as
✔ sas
❌ su
❌ ea
如果前面加上^
,也可以匹配除了方括号内所有字符以外的字符。例如:
-
[^aeiou]
✔ t
✔ as
❌ a
❌ aei
可以用小短横表示范围,常用在数字、大小写字母上。例如:
-
[2-7]
✔ 3
✔ s5t
❌ s
❌ 8
-
[a-z]
✔ b
✔ 3cs
❌ B
-
[a-zA-Z]
✔ b
✔ B
❌ 2
限定匹配
当我们需要重复前面的内容 n 次时,使用大括号 {n}
。例如:
-
[2-7]{5}
✔ 34736
✔ s34736t34736
❌ 347s36
❌ 347
❌ 347367
-
a[2-7]{5}
✔ a34736
✔ sa34736t
❌ as34736
当我们需要重复前面的内容至少 n 次时,使用大括号 {n,}
。例如:
-
[2-7]{3,}
✔ 347
✔ 34736
❌ 34
当我们需要重复前面的内容至少 n 次至多 m 次时,使用大括号 {n,m}
。例如:
-
[2-7]{3,5}
✔ 347
✔ 3473
❌ 34
❌ 347367
我们使用星号 *
表示 {0,}
的相同意思。例如:
-
[2-7]*
✔ 347
✔ **
❌ a
我们使用加号 +
表示 {1,}
的相同意思。例如:
-
[2-7]+
✔ 347
❌ 3
我们使用问号 ?
表示 {0,1}
的相同意思。例如:
-
[2-7]?
✔ 3
✔ **
❌ 34
特殊匹配
我们使用竖线 |
表示或。例如:
-
[2-7]|[a-z]
✔ 2
✔ a
❌ 8
加了小括号的表达式可以视作子表达式。例如:
-
([2-7]|[a-z])*
✔ 222asf4
✔ afgr33f
一些特殊字符可以用斜杠 /
表示。例如:
-
\n
换行 -
\r
回车 -
\f
换页 -
\t
制表符 -
\v
垂直制表符 -
\s
相当于[\n\r\f\t\v]
-
\S
相当于[^\n\r\f\t\v]
-
\w
相当于[A_Za_z0-9_]
-
\d
相当于[0-9]
还有一些特殊的匹配符。例如:
-
.
相当于[^\n\r]
一些符号用于定位。例如:
-
$
匹配字符串结束位置 -
^
如果不在中括号[]
中,则匹配字符串开始位置 -
\b
匹配单词边界 -
\B
匹配非单词边界
对于上面提到的符号,如果要匹配它们本身,需要在前面加上斜杠 \
。例如:
\?
\[
\$
断言
使用 exp1(?=exp2)
查找 exp2 前面的 exp1。例如:
-
a(?=[\d+])
✔ 123a123aba
同理,
使用 (?<=exp2)exp1
查找 exp2 后面的 exp1。
使用 exp1(?!exp2)
查找后面不是 exp2 的 exp1。
使用 (?<!exp2)exp1
查找前面不是 exp2 的 exp1。
一些常用例子
- 可以输入含有
^%&',;=?$\"
等字符:[^%&',;=?$\x22]+
- 禁止输入含有
~
的字符:[^~\x22]+
- Email地址:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
- 域名:
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
- InternetURL:
[a-zA-z]+://[^\s]*
或^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
- 手机号码:
^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\d{8}$
- 国内固定电话号码:
\d{3}-\d{8}|\d{4}-\d{7}
- 18位身份证号码:
^((\d{18})|([0-9x]{18})|([0-9X]{18}))$
- 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
- 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
^[a-zA-Z]\w{5,17}$
- 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-14之间):
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,14}$
- 日期格式:
^\d{4}-\d{1,2}-\d{1,2}
- 一年的12个月:
^(0?[1-9]|1[0-2])$
- 一个月的31天(01~09和1~31):
^((0?[1-9])|((1|2)[0-9])|30|31)$
- xml文件:
^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
- 中文字符:
[\u4e00-\u9fa5]
- 双字节字符:
[^\x00-\xff]
- 空白行:
\n\s*\r
- HTML标记:
<(\S*?)[^>]*>.*?</\1>|<.*? />
- 首尾空白字符:
^\s*|\s*$或(^\s*)|(\s*$)
- 腾讯QQ号:
[1-9][0-9]{4,}
- 中国邮政编码:
[1-9]\d{5}(?!\d)
- IP地址:
\d+\.\d+\.\d+\.\d+
- IP地址:
((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
Comments