什么是正则表达式
正则表达式是用来描述具有一定特征的字符串的特殊字符串。
作用:
验证、查找、替换、分割 。
普通字符
写什么,匹配什么
非特殊含义以外的字符,如 a b 中国 。 普通字符精确匹配
元字符与转义
元字符:[] {} () \ ^ $ .* + ? | →
转义字符:\+字母 \d[0-9] \\: \ \s:空白符 \w:字母数字
自定义字符
由 [] 组,只匹配一个, 需要注意以下四个:
^ : 如果在第一个位置,表示取反的含义。
- :表示一个区间即范围
] : 最近一个位置为:结束 ,如果要表示普通的]请加 \
\ : 转义
. 在字符类中 不是代表任意的字符,代表自身 . 的含义。 如果需要表示原有的含义,挪动位置 或者加 \ 。
标准字符类
\d digit[0-9] , [0123456789]
\w word [A-Za-z0-9]
\s space 空格,制表符,换行符
. :多行模式(缺省):除了换行符\r\n以外的任意一个字符, [^\n\r] ;单行模式:可以匹配 包含换行符在内的任意一个字符
\D [^\d][^0123456789][^0-9]
\W [^\w] 非字母, 数字, _, 即空白,标点符号及中文
\S [^\s]
量词 匹配的过程中,需要指定次数
*:0个及以上 +:一个及以上 ?:0或1个
{n}:n次,非负数 {n,}:大于等于n次 {n,m}:大于等于n次小于等于m次
贪婪模式
在匹配次数不定时如 *, {n,}, + 匹配字符越多越好,默认模式即”贪婪模式”
贪婪模式 greedy(匹配字符越多越好,可回溯)
? 懒惰模式 lazy reluctant (匹配字符越少越好,可回溯)
+ 独占模式 possessive(匹配字符越多越好,不可回溯) 用的较少
阻止贪婪有两种方式
1、 量词后面使用 ?
2、 使用取反
边界
1)、边界不占用宽度,只是一个界限
2)、 ^ :开始 \b :单词边界 \B :非单词边界 $ :结束
^ :多行代表每行头 单行代表整个字符串的开始
$ : 多行代表每行尾 单行代表字符串的结尾
\b : 匹配前面或后面的不是\w
\B : 匹配前面或后面的是\w
选择符|
| ->优先级低 ,满足匹配则停止,不会查找更优的方案
he|hello –>只匹配 he,不匹配 hello
hello|he->匹配 he 与 hello
模式修改符
(?ism )*****
(?-ism)
i : insensitive 使正则表达式对大小写不敏感;(重点)
s : singleline 开启“单行模式”,即点号“.”匹配新行符;
m : multiline 开启“多行模式”,即“^”和“$”匹配新行符的前面和后面的位置
(?i)select(?-i) -> 不区分大小写。
零宽断言
前瞻(Lookahead) 后顾(Lookbehind)
(?=exp) 先行断言 断言自身出现的位置的后面能匹配表达式exp
(?<=exp>) 后发断言 断言自身出现的位置的前面能匹配表达式exp
(?!exp) 断言此位置的后面不能匹配表达式exp
(?<!Exp) 断言此位置的前面不能匹配表达式
常用类
java.util.regex Pattern Matcher String
一般在查找、替换、分割、组的使用