1、定义字符串出现次数的符号
{n}:字符串要连续出现n次
{n,m}:字符串至少要连续出现n次,最多可以出现m次
{n,}:字符串至少要连续出现n次,最多出现次数不限
?:字符串出现0次或1次,相当于{0,1}
*:字符串至少出现0次,相当于{0,}
+:字符串至少出现1次,相当于{1,}
():括号中的表达式作为整体
|:竖线两侧的表达式以或者关系存在
2、匹配模式
2.1、贪婪模式
.+
2.2、非贪婪模式
.+?
定位符的使用
^:表示字符串开始位置,在正则表达式中要出现在最左(前)面,否则将被当作普通字符对待
$:表示字符串结束的位置,在正则表达式中要出现在最右(后)面,否在将被当作普通字符对该
\b:表示紧邻空白字符,字符串的开头或结尾也被看作空白字符
\B:表示不与空白字符相邻
\s:
3、正反向预搜索
3.1、正向搜索
肯定形式:(?=) 否定形式:(?!)
正向预搜索的内容要写在目标字符串的右边
3.2、反向预搜索
肯定形式:(?<=) 否定形式:(?<!)
方向预搜索的内容要写在目标字符串的左边
预搜索的内容并非固定内容,也可以用正则表达式来描述
windows(?=NT|XP)
windows(?=\\d)
windows(?!\\d)
(?<=A|B)windows
(?<!\\d)windows
4、反向引用
正则表达式中,被小括号括起来的内容会被表达式引擎编号并记录下来
通过\num(num>=1)就能表示出num号的内容,但这部分内容必须在前面已经出现过
对内容编号的顺序:左括号先出现的内容被编号,但它仍然会被表达式引擎当作整体来看待
可以用(?<name>x)的格式为一个组命名,使用\\k<name>的方式引用该组里面的内容
5、Pattern类使用
一个Pattern类对象当中封装了一个编译过的正则表达式
构造方法是私有的,只能通过静态方法compile()生成对象
pattern()方法可以获得对象中所封装的那个正则表达式
split()方法可以用来分割字符串,能与正则表达式匹配的目标字符串被当作字符串,可分割String/StringBuffer/StringBuilder
静态方法matchers()可以测试某字符串与正则表达式能否匹配
静态方法quote()可获得被加入"特殊字符失效区"的正则表达式