基本语法:
/ 转义字符
[] in [/d/D]
/d 数字0-9
- 多少到多少
/D 非数字^0-9
^ 非
/w 单词字符[a-zA-Z0-9]{2} A3
/W 非单词字符[^/w]
/s 空白(如/n/t)
? 0-1次
+ 1-n次
* 0-n次
{n} 必须是N次
{n,} 大于等于N次
{n,m} n<= =<m [1-9][a-z]{0,2}
() 提升优先级
^ 宣布正则开始 “^[-1-9][0-9]{0,2}$”
$ 宣布正则结束 “-9”
- 放置于[]中的开始或者结束位置表示“-”
-------------------------------------------------------------------------
普通字符:
字母、数字、汉字、下划线,以及没有被定义特殊意义的标点符号,都是 "普通字符"。
说明:
"普通字符" 在匹配时,匹配与之相同的一个字符。如果一个表达式中,所有的字符都是 "普通字符",
那么这个表达式的匹配操作,实际上就是一个普通的 "字符串查找" 操作。
---------------------------------------------------------------------------------------------------------------------
简单的转义字符:(注意:java的正则表达式转义字符,一定要用双反斜线\\)
一些不便书写的字符,比如换行符,制表符等,使用 \n,\t 来表示。
另外有一些标点符号在正则表达式中,被定义了特殊的意义,因此需要在前面加 "\"
进行转义后,匹配该字符本身。
说明:
转义符 说明
\a 响铃符 = \x07
\f 换页符 = \x0C
\n 换行符 = \x0A
\r 回车符 = \x0D
\t 制表符 = \x09
\v 垂直制表符 = \x0B
\e ESC 符 = \x1B
\x20 使用两位十六进制表示形式,可与该编号的字符匹配
\u002B 使用四位十六进制表示形式,可与该编号的字符匹配
\x{20A060} 使用任意位十六进制表示形式,可与该编号的字符匹配
被定义了特殊的意义,因而需要在前面添加 "\" 来匹配该字符本身的标点符号:
字符 说明
^ 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"
$ 匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"
( ) 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"
[ ] 用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"
{ } 修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"
. 匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."
? 修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?"
+ 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+"
* 修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"
| 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"
----------------------------------------------------------------------------------------------------------------------
转义字符 \Q...\E:
使用 \Q 开始,\E 结束,可使中间的标点符号失去特殊意义,将中间的字符作为普通字符。
使用 \U 开始,\E 结束,除了具有 \Q...\E 相同的功能外,还将中间的小写字母转换成大写。
在大小写敏感模式下,只能与大写文本匹配。
使用 \L 开始,\E 结束,除了具有 \Q...\E 相同的功能外,还将中间的大写字母转换成小写。
在大小写敏感模式下,只能与小写文本匹配。
说明:
\Q...\E 适合用于:表达式中需要比较长的普通文本,而其中包含了特殊符号。
举例
表达式 说明
\Q(a+b)*3\E 可匹配文本 "(a+b)*3"。
\(a\+b\)\*3 如果不使用 \Q...\E 进行转义,则对每个特殊符号进行转义。
----------------------------------------------------------------------------------------------------------------------
字符集合:
可以匹配 "多个字符" 其中任意一个字符的正则表达式。虽然是 "多个字符",但每次只能匹配其中一个。
说明:
字符集合 说明
. 小数点可以匹配除了换行符(\n)以外的任意一个字符
\w 可以匹配任何一个字母或者数字或者下划线
\W W大写,可以匹配任何一个字母或者数字或者下划线以外的字符
\s 可以匹配空格、制表符、换页符等空白字符的其中任意一个
\S S大写,可以匹配任何一个空白字符以外的字符
\d 可以匹配任何一个 0~9 数字字符
\D D大写,可以匹配任何一个非数字字符
----------------------------------------------------------------------------------------------------------------------
自定义字符集合 [ ]:
用中括号 [ ] 包含多个字符,可以匹配所包含的字符中的任意一个。同样,每次只能匹配其中一个。
用中括号 [^ ] 包含多个字符,构成否定格式,可以匹配所包含的字符之外的任意一个字符。
说明:
正则表达式中的特殊符号,如果被包含于中括号中,则失去特殊意义,但 \ [ ] : ^ - 除外。
标准字符集合,除小数点(.)外,如果被包含于中括号中,自定义字符集合将包含该集合。
比如:[\d.\-+],将可以匹配数字,小数点和 + - 符号。(小数点和 + 号失去特殊意义)
用减号相连的 2 个普通字符,自定义字符集合将包含该范围。
比如:[\dA-Fa-f],将可以匹配 0 - 9, A - F, a - f。
----------------------------------------------------------------------------------------------------------------------
匹配次数限定符: 使被修饰的表达式可多次重复匹配的修饰符。
说明:
可使被修饰的表达式重复固定次数,也可以限定一定的重复匹配的次数范围。
在限定符之后的表达式能够匹配成功的情况下,不定次数的限定符总是尽可能的多匹配。
如果之后的表达式匹配失败,限定符可适当“让出”能够匹配的字符,以使整个表达式匹配成功。
这种模式就叫“贪婪模式”。
限定符 说明
{n} 表达式固定重复n次,比如:"\w{2}" 相当于 "\w\w"
{m, n} 表达式尽可能重复n次,至少重复m次:"ba{1,3}"可以匹配 "ba"或"baa"或"baaa"
{m, } 表达式尽可能的多匹配,至少重复m次:"\w\d{2,}"可以匹配 "a12","x456"...
? 表达式尽可能匹配1次,也可以不匹配,相当于 {0, 1}
+ 表达式尽可能的多匹配,至少匹配1次,相当于 {1, }
* 表达式尽可能的多匹配,最少可以不匹配,相当于 {0, }
"勉强模式"限定符:
在限定符之后添加问号(?),则使限定符成为“勉强模式”。勉强模式的限定符,总是尽可能少的匹配。
如果之后的表达式匹配失败,勉强模式也可以尽可能少的再匹配一些,以使整个表达式匹配成功。
限定符 说明
{m, n}? 表达式尽量只匹配m次,最多重复n次。
{m, }? 表达式尽量只匹配m次,最多可以匹配任意次。
?? 表达式尽量不匹配,最多匹配1次,相当于 {0, 1}?
+? 表达式尽量只匹配1次,最多可匹配任意次,相当于 {1, }?
*? 表达式尽量不匹配,最多可匹配任意次,相当于 {0, }?
"占有模式"限定符:
在限定符之后添加加号(+),则使限定符成为“占有模式”。占有模式的限定符,总是尽可能多的匹配。
与“贪婪模式”不同的是,即使之后的表达式匹配失败,“占有模式”也不会“让出”自己能够匹配的字符。
限定符 说明
{m, n}+ 表达式尽可能重复n次,至少重复m次。
{m, }+ 表达式尽可能的多匹配,至少重复m次。
?+ 表达式尽可能匹配1次,也可以不匹配,相当于 {0, 1}+
++ 表达式尽可能的多匹配,至少匹配1次,相当于 {1, }+
*+ 表达式尽可能的多匹配,最少可以不匹配,相当于 {0, }+
----------------------------------------------------------------------------------------------------------------------
字符边界:
本身不匹配任何字符,只对字符边界和字符间缝隙附加条件的表达式。
说明:
有些正则表达式中的符号,可以对文本中当前所在位置作限制条件.
边界条件 说明
^ 当前位置必须是文本开始位置
$ 当前位置必须是文本结束位置
\b 当前位置的左右两侧,只能有一侧是字母数字或下划线
----------------------------------------------------------------------------------------------------------------------
选择表达式 xxx | xxx:
使用竖线 "|" 分隔多段表达式,整个表达式可匹配其中任意一段。
说明
正则引擎总是从左向右进行尝试匹配,如果每一段表达式都匹配失败,则整个表达式匹配失败。
----------------------------------------------------------------------------------------------------------------------
分组 ( ):(注:这是捕获组)
用括号 ( ) 将其他表达式包含,可以使被包含的表达式组成一个整体,在被修饰匹配次数时,可作为整体被修饰。
另外,用括号包含的表达式,所匹配到的内容将单独作记录,匹配过程中或结束后可以被获取。
说明
每一对括号会分配一个编号,使用 () 的捕获根据左括号的顺序从 1 开始自动编号。捕获元素编号为零的第一
个捕获是由整个正则表达式模式匹配的文本---就是整个表达式
组和捕获
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)
组零始终代表整个表达式。
----------------------------------------------------------------------------------------------------------------------
字符类运算符的优先级如下所示,按从最高到最低的顺序排列:
1 字面值转义 \x
2 分组 [...]
3 范围 a-z
4 并集 [a-e][i-u]
5 交集 [a-z&&[aeiou]]
----------------------------------------------------------------------------------------------------------------------
非捕获组 (?:xxx):
使用 (?: ) 包含其他表达式,可使被包含的表达式组成一个整体,在被修饰匹配次数时,可作为整体被修饰。
说明:
与普通分组不同的是,非捕获组不记录所匹配的内容,比普通分组更节约内存资源。
通过格式 (?ismg-ismg:xxx) 可对匹配模式进行修改,修改后的模式只对当前非捕获组内部起作用。
demo:
中文 = "^[/u0391-/uFFE5]+$";
英文 = "^[A-Za-z]+$";
数字 = "^//d+$";
整数 = "^[-//+]?//d+$";
实数 = "^[-//+]?//d+(.//d+)?$";
邮件 = "^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+.[a-zA-Z]{2,5}?((.cn)|(.jp))?$";
邮件2 = "^[a-zA-Z0-9_]+[//Wa-zA-Z0-9_]*@[a-zA-Z0-9_]+.[a-zA-Z]{2,5}?((.cn)|(.jp))?$";
网址 = "^http://[A-Za-z0-9]+.[A-Za-z0-9]+[-///=?%&_~`@//[//]/':+!]*([^<>/"/"])*$";
电话 = "^((//(//d{3}//-//))?(//(0//d{2,3}//)|0//d{2,3}-))?[1-9]//d{6,7}$";
手机 = "^((//(//d{3}//))|(//d{3}//-))?((13)|(15))//d{9}$";
货币 = "^//d+(//.//d+)?$";
邮编 = "^[1-9]//d{5}$";
身份证 = "^//d{17}[x0-9]$";
QQ = "^[1-9]//d{4,8}$";
UnixPath="^([///][A-Za-z0-9])+*$";