Translated from: http://hi.baidu.com/xu_yunan/blog/item/7ce5d93bb279d22c96ddd843.html

Various instances of regular expressions

###Username

1
2
3
4
5
^[a-z0-9_-]{3,15}$ 
^ # 行开始
[a-z0-9_-] # 匹配列表中的字符,a-z,0–9,下划线,连字符
{3,15} # 长度至少3个字符,最大长度为15
$ # 行结束

###Password

1
2
3
4
5
6
7
8
9
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}) 
( # 组开始
(?=.*\d) # 必须包含一个数字 0-9
(?=.*[a-z]) # 必须包含一个小写字符
(?=.*[A-Z]) # 必须包含一个大写字符
(?=.*[@#$%]) # 必须包含一个列表中的特殊字符"@#$%"
. # 检查所有字符串与前面的条件的匹配
{6,20} # 长度至少为6个字符,最大长度为20
) # 组结束

###Hexadecimal color

1
2
3
4
5
6
7
8
9
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$ 
^ # 行开始
# # 必须包含一个"#"符号
( # 组#1开始
[A-Fa-f0-9]{6} # 列表中的任意字符串,长度为6
| # 或者
[A-Fa-f0-9]{3} # 列表中的任意字符串,长度为3
) # 组#1结束
$ # 行结束

Email

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$
^ # 行开始
[_A-Za-z0-9-]+ # 必须以中括号中的字符为起始字符[],必须包含一个或多个(+)
( # 组#1开始
\\.[_A-Za-z0-9-]+ # 接下来是一个点"."和中括号内的字符[],必须包含一个或者多个(+)
)* # 组#1结束, 这个组是可选的(*)
@ # 必须包含一个"@"符号
[A-Za-z0-9]+ # 接下来是中括号内的字符[],必须包含一个或者多个(+)
( # 组 #2开始 – 一级TLD检查
\\.[A-Za-z0-9]+ # 接下来是一个点"."和中括号内的字符[],必须包含一个或者多个(+)
)* # 组#2结束,这个组是可选的(*)
( # 组#3开始 – 二级TLD检查
\\.[A-Za-z]{2,} # 接下来是一个点"."和中括号内的字符[], 最小长度为2
) # 组#3结束
$ # 行结束

图像文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
([^\s]+(\.(?i)(jpg|png|gif|bmp))$) 
( # 组#1开始
[^\s]+ # 必须包含一个或更多的任意字符(除了空格)
( # 组#2开始
\. # 接下来是一个点"."
(?i) # 忽略后边字符的大小写检查
( # 组#3开始
jpg # 包含字符"jpg"
| # ..或者
png # 包含字符"png"
| # .. 或者
gif # 包含字符"gif"
| # .. 或者
bmp # 包含字符"bmp"
) # 组#3结束
) # 组#2结束
$ # 字符串的结束
) # 组#1结束

补充一个:[\\s\\S]*?([^\\/]*?\\.jpg)

IP地址

1
2
3
4
5
6
7
8
9
10
11
12
13
^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$ 
^ # 行开始
( # 组#1开始
[01]?\\d\\d? # 可以是1到2个数字. 如果出现3个数字, 必须以0或者1开始
# 例如 ([0-9], [0-9][0-9],[0-1][0-9][0-9])
| # ...或者
2[0-4]\\d # 以2开始, 紧跟着是0-4,并且以任意数字结尾(2[0-4][0-9])
| # ...或者
25[0-5] # 以2开始, 紧跟着是5,并且以0-5结尾 (25[0-5])
) # 组#1结束
\. # 接下来是点"."
.... # 重复3次 (3x)
$ # 行结束

12-小时制时间

1
2
3
4
5
6
7
8
9
10
11
(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm) 
( # 组#1开始
1[012] # 以10, 11, 12开始
| # 或者
[1-9] # 以1,2,...9开始
) # 组#1结束
: # 接下来是一个冒号 (:)
[0-5][0-9] # 接下来是0..5和0..9,意思是00到59
(\\s)? # 接下来是一个空格(可选)
(?i) # 下面的检查不区分大小写
(am|pm) # 接下来是AM或者PM

24小时制时间正则表达式模式

1
2
3
4
5
6
7
8
([01]?[0-9]|2[0-3]):[0-5][0-9] 
( # 组#1开始
[01]?[0-9] # 以0-9,1-9,00-09,10-19开始
| # 或者
2[0-3] # 以20-23开始
) # 组#1结束
: # 接下来是一个冒号(:)
[0-5][0-9] # 接下来是0..5和0..9,意思是00到59

日期格式 (dd/mm/yyyy) 正则表达式模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d) 
( # 组#1开始
0?[1-9] # 01-09或者1-9
| # ..或者
[12][0-9] # 10-19或者20-29
| # ..或者
3[01] # 30, 31
) # 组#1结束
/ # 接下来是一个"/"
( # 组#2开始
0?[1-9] # 01-09或者1-9
| # ..或者
1[012] # 10,11,12
) # 组#2结束
/ # 接下来是一个"/"
( # 组#3开始
(19|20)\\d\\d # 19[0-9][0-9]或者20[0-9][0-9]
) # 组#3结束

HTML标签

1
2
3
4
5
6
7
8
9
10
11
 <("[^"]*"|'[^']*'|[^'">])*> 
< # 以"<"标签开始
( # 组#1开始
"[^"]*" # 只允许两个双引号成对出现-"string"
| # ..或者
'[^']*' # 只允许两个单引号成对出现- 'string'
| # ..或者
[^'">] # 不能出现单独的双引号、单引号和">"
) # 组#1结束
* # 0次或多次
> # 以结束标签">"结束

HTML中的A标签正则表达式模式

(?i)<a([^>]+)>(.+?)

1
2
3
4
5
6
7
8
9
10
(                 # 组#1开始
?i            #   所有的检查区分大小写
)              # 组#1结束
<a             # 以"<a"开始
(            # 组#2开始
[^>]+       # 除了(">")之外的任意字符,至少一个字符
)            # 组#2结束
>            #     接下来是">"
(.+?)       #       匹配所有
</a>   #         以"</a>结束

提取HTML链接正则表达式模式

1
2
3
4
5
6
7
8
9
10
11
12
\s*(?i)href\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+));
\s*                          # 可以以空格开始
(?i)                       #   所有的检查是区分大小写的
href                    #     接下来是一个"href"字
\s*=\s*              #       等号两边都允许空格,
(              #         组#1开始
"([^"]*")     #           只允许2个双引号成对出现 - "string"
|             #           ..或者
'[^']*'       #           只允许2个单引号成对出现 - 'string'
|             #           ..或者
([^'">]+) #           或者不允许出现单独的单引号、双引号和">"
)             #         组#1结束