快速入门:RegExp 很多语言(前后端语言)都支持正则表达式
正则表达式作用:对 字符串/文本 执行模式匹配的技术
提取文章中所有英文单词
提取文章中所有数字
提取百度热榜标题
验证电子邮件格式
验证手机号格式
相关类 java.util.regex包下
Pattern类 正则表达式对象类/模式对象
获取正则表达式对象 静态方法compile("参数字符串") 返回Pattern对象
创建匹配器 成员方法matcher(字符串) 参数是需要处理的字符串,返回Matcher对象
这是条件匹配器,只要有满足的,就能找到
静态方法获取整体匹配器 matchers(regex,字符串) 看字符串整体是否满足regex的条件,返回boolean值
此方法不是用于寻找符合条件的字符串,而是用于验证字符串是否符合条件
底层调的是Matcher的mathers方法
Matcher类 匹配器类 用于对String处理
匹配寻找 成员方法 find() 找到返回true
匹配结果 成员方法 group(int) 返回的是结果
start(group) 返回之前find()匹配的初始索引 有group就是返回组的
end(group) 返回之前find()匹配的结束索引 有group就是返回组的
替换或添加 appendReplacement(StringBuffer,原字符串-》一般是find()匹配到的)
末尾添加 appendTail(StirngBuffer)
替换后返回 replaceAll(参数) 不会修改原来内容,返回的结果才是替换后的字符串,参数是正则表达式
replaceFirst()
PatternSyntaxException 异常类
底层实现
\\d表示0-9的任意一个数字 digit
find()方法
1 根据规则定位满足条件的字符串
2 找到后,
不分组的情况:
将找到字符串的开始索引,记录到匹配器对象的属性中 数组 int[] groups groups[0]中
将找到字符串的结束索引+1,记录到 group[1]中
将 结束索引+1,记录到 group[2]中,叫oldLast,继续下去找,就从这里开始了
分组的情况:第一个()就是第一组
将找到字符串的开始索引,记录到匹配器对象的属性中 数组 int[] groups groups[0]中
将第一组匹配到的字符串的开始索引,记录到 group[2]中;将 结束索引+1,记录到 group[3]中
将第二组。。继续下去,直到组完
将 结束索引+1,记录到 group[2]中,叫oldLast,继续下去找,就从这里开始了
group(int)
看源码:发现其是根据 group[0]和group[1]的位置截取字符串subString 返回
int参数是考虑正则表达式中用()分组的情况
0就是正则表达式整体全部取出,没有()一定要是参数0
1就是取出第一组(匹配还是按照整体匹配,但是只取出第一组)
2就是取出第二组。。。
参数不能超过()数量,否则抛异常
元字符
正则转义符 匹配特殊字符
字符匹配符
限定符 限定出现的次数
选择匹配符
定位符
分组组合 正则表达式()不能随便加
反向引用符
正则转义符 java是\\ 其他语言是\
. * + () $ /\ ? [] {} ^都要用到转移字符
字符匹配符
\] 可接收的字符序列 \[abc\] a或b或c都可以
\[\^\] 不接收的字符序列 全部不接收,其他全部接收
- 连字符 A-Z A到Z
. 表示匹配除\\n外所有字符
\\\\d 匹配单个数字字符
\\\\D 匹配单个非数字字符
\\\\w 匹配单个数字或大小写字母
\\\\W 匹配单个 非数字且非大小写字母
\\\\s 匹配任何空白字符 空格,制表符等
\\\\S 匹配任何非空白字符
?代表0或1个字符
+代表1个或多个字符
?i表示不区分大小写 ((?i)a)表示a不区分大小写
限定符
\* 0-n次 abc\* 表示abc都可以出现0-n次
+ 1-n次
?字符重复0-n次 (abc)? abc整体出现0或n次
\[n\]只能输入n个字符 (abcde)\[3\] abcde中选3个出现
{n,}不少于n个
{n,m}不少于n个,但不多于m个
?紧随其他限定符之后 表示非贪心匹配,尽可能短的匹配,不加,就是贪心匹配,尽可能长的匹配
"oooooo" "o+?"只匹配单个o "o+"匹配所有o
选择匹配符
\| 表示匹配满足 \|左边的正则表达式 或 \|右边的正则表达式
定位符 规定匹配字符串出现位置
\^指定起始字符 \^(\[0-9\]+\[a-z\]\*) 起始字符必须是 一个数字开头+任意小写字母
$指定结束字符 \[a-z\]+$ 结束字符必须是一个或多个小写字母
\\\\b 匹配目标字符串的边界 边界指中间有空格或最后的结束位置 "abc"和 "abc bc"用 (bc)\\\\b 就可以匹配到
\\\\D 匹配非边界
分组,捕获
捕获分组:
(正则表达式)分组 是非命名捕获分组 组的名字自动按照()顺序填
(?\