正则
正则表达式是用来描述具有一定特征的字符串的特殊字符串.
将其运用到java代码中可以起到验证.查找.替换.分割的作用
正则的标识:
-
标准标识
ab*: a 若干个 b ->* 零个及以上 ,匹配: a ab
abbbbb abbbbbbb 不能 bbbbb。
(cd)*: ()->组,改变了优先级 ,若干个 cd,匹配: “” cd
cdcd cdcdcd
ab*(cd)*:a 若干个 b 和若干个 cd 匹配: a ab
abbbbb abbbbbbb acd acdcd abbbbbcd abcd
ab*|(cd)*: |或的优先级低 匹配: a ab cd
ab|c : 匹配 ab c
-
元字符与转义字符
14个元字符:[ ] { } ^ $ . * + ? |
转义字符:+字母 /d→[0-9] \→\ \s →空白符 \w→字母数组空格
-
自定义字符
由 [ ] 组,只匹配一个, 需要注意以下四个:
^ : 如果在第一个位置,表示取反的含义。
- :表示一个区间即范围
] : 最近一个位置为:结束 ,如果要表示普通的]请加 \
\ : 转义
. 在字符类中 不是代表任意的字符,代表自身 . 的含
义。 如果需要表示原有的含义,挪动位置 或者加 \ 。
-
默认|标准字符类
-
量词
- 在匹配的过程中,需要指定次数
贪婪模式:
在匹配次数不定时 如*, {n,}, +
匹配字符是越多越好 你出来什么数字 他就包容什么数字
- 贪婪模式greedy(匹配字符越多越好,可回溯)
?
懒惰模式 lazy reluctant(匹配字符越少越好,一旦满足条件就马上停止,可回溯)+
独占模式 possessive(匹配的字符越多越好,不可控,不可回溯)
阻止贪婪有两种方式
1.量词后面使用
?
2.使用取反
^
边界
1)、边界不占用宽度,只是一个界限
2)、 ^
:开始 \b
:单词边界 \B
:非单词边界
$
:结束
^
:多行代表每行头 单行代表整个字符串的开始
$
: 多行代表每行尾 单行代表字符串的结尾
\b
: 匹配前面或后面的不是\w
\B
: 匹配前面或后面的是\w
选择符与分组
选择符
|
→一旦左边的满足匹配,那么将直接跳过右边的条件(满足匹配则停止,不会查找更优方案)
he|
hello →只会匹配he,不会继续进行匹配
hello|
he→ 匹配he和hello
分组()
匹配 ab c -> ab|c
匹配 ab ac -> a(b|c)
只匹配 get -> \bget\b
匹配 get 和 getValue -> getvalue|get
get(value)?
获取 and or -> \band\b|\bor\b \b(and|or)\b
反向引用: \ 内部默认缓存,从第一个左括号计算,编号
为 1 开始。
非捕获组:(?:xxx)
不缓存组
模式修改符
(?ism )*****(?-ism)
i
: insensitive 使正则表达式对大小写不敏感;(重点)
s
: singleline 开启“单行模式”,即点号“.”匹配新行 符;
m
: multiline 开启“多行模式”,即“^”和“$”匹配新行符 的前面和后面的位置
(?i)select(?-i)
-> 不区分大小写。
则表达式对大小写不敏感;(重点)
s
: singleline 开启“单行模式”,即点号“.”匹配新行 符;
m
: multiline 开启“多行模式”,即“^”和“$”匹配新行符 的前面和后面的位置
(?i)select(?-i)
-> 不区分大小写。