1. 什么是正则表达式
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式可以用形式化语言理论的方式来表达。正则表达式由常量和算子组成,它们分别指示字符串的集合和在这些集合上的运算
2. 基本语法
符号
-----优先级
* 具有最高优先级 代表前面的字符可以不出现,也可以出现一次或者多次。(0次、或1次、或多次)。例如,「0*42
」可以匹配42、042、0042、00042等
() 第二优先级 圆括号可以用来定义操作符的范围和优先度。例如,「gr(a|e)y
」等价于「gray|grey
」,「(grand)?father
」匹配father和grandfather。
| 最低优先级 竖线符代表选择(即并集)。例如「gray|grey
」可以匹配grey或gray。
-----数量
+ 加号代表前面的字符必须至少出现一次。(1次、或多次)。例如,「goo+gle
」可以匹配google、gooogle、goooogle等;
? 问号代表前面的字符最多只可以出现一次。(0次、或1次)。例如,「colou?r
」可以匹配color或者colour
* 星号代表前面的字符可以不出现,也可以出现一次或者多次。(0次、或1次、或多次)。例如,「0*42
」可以匹配42、042、0042、00042等。
{n} n是一个非负整数。匹配确定的n次。例如,「o{2}
」不能匹配「Bob
」中的「o
」,但是能匹配「food
」中的两个o。
{n,} n是一个非负整数。至少匹配n次。例如,「o{2,}
」不能匹配「Bob
」中的「o
」,但能匹配「foooood
」中的所有o。「o{1,}
」等价于「o+
」。「o{0,}
」则等价于「o*
」。
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}
」将匹配「fooooood
」中的前三个o。「o{0,1}
」等价于「o?
」。请注意在逗号和两个数之间不能有空格。
比如
(ab)c ==
abc
a|(b(c*)) ==
a|bc*
a|b* 代表
{a , "" (空), b, bb, bbb, ...}
(a|b)* 代表
由包括空串、任意数目个a或b字符组成的所有字符串的集合
ab*(c|ε) 代表
开始于一个a接着零或多个b和最终可选的一个c的字符串的集合
3. 正则上组的概念
例如 ((A)(B(C)))
第0组 ((A)(B(C)))
第一组 ((A)(B(C)))
第二组 (A)
第三组 (B(C))
第四组 (C)
4. java上应用
等价于
表示用 规则 a*b a可以出现0~n去匹配字符串"aaaaaab"
输出为: