正则表达式
Java当中,String s = ..... s.match(String regex)输入一个正则表达式,如果匹配则返回true 正则表达式是一种"规则".
注意
第一个表:
只能匹配一个字符
第四条只是第三条的另一种表达.
第五条注意不能写成& 一个&表示匹配一个'&'而已
如果括号里只有一个字符,那么可以省略括号
第二个表:
只能匹配一个字符
第二列表示等价的表达形式
\
注意这是Java的转译字符,因此在使用第二个表的时候需要处理一下.
小括号:表示一组,可见邮箱的样例.
样例:
也就是汉字也是一个字符.
另外:非常重要的:如果我想匹配字符.怎么办?这时不能用.(因为这是匹配任意字符的意思),而应该用\\.(原理:应该写成\.表示匹配的是. 然后java本身又需要转译\,故写成\\.)
想要出现多次怎么办?
前两个表的基础上,加上数量词即可:
例子:

常见的邮箱:
当然,这里限制3.1 3.3的长度是不对的.因此,最好写成:
\\w+@[\\w&&[^_]]+(\\.[\\w&&[^_]]+){1,2}
插件推荐:
any-rule
注意最后生成的会在开头有^(表示开头开始匹配),结尾有$(表示匹配到结尾)
java默认就是从头比到尾.
另外,生成的表达式里只有一个\,java中还需要给每个\转译一下
其他符号:
- | 表示或者
如匹配小时:([01]\d|2[0-3])
上面这是两种写法
这个"或者"是经常需要配合括号使用的.
这是对的
如果没有括起来,那么左边所有的都算是|的一部分了
当然,会发现|实际上和[]的作用很像的.
- 忽略大小写
如何只忽略bc的大小写?
a(?i)bc
只忽略b的怎么办?
a((?i)b)c
- 括号:实际上就是匹配一个字符串.也就是把括起来的部分视作一个字符串的整体.

正反斜线傻傻分不清?
/ 是上坡,那么就是正斜线
\是下坡,那么就是反斜线
正则表达式除了匹配校验的作用,还有查找字符串的作用.
Pattern类:属于java.util.regex Matcher类:同样属于java.util.regex
如上,那么会发现Java 的初始索引为0,结束索引+1 为 4
注意compile是静态方法.
继续调用,会往后读取后面的内容.
改进:

带条件的爬取
结果:
当然,这样效果不是很明显,我们改一下原本的文本:(改了大小写)
需求1:
需求二是什么?
实际上regex2和3是一样的的.
regex3当中,?表示站位符,也就是代表前面的java.?:表示返回所有的文本
需求三:
! 表示去除.

总结: ?= 返回?的占位部分. ?: 返回所有. ?! 匹配的时候?部分的后面不能包括什么 如果看不懂可以往下看,看到非捕获分组再回来.
贪婪爬取和非贪婪爬取.(带条件爬取的一种)
ab+可以匹配多个文本:
ab,abb,abbb...

java默认是贪婪爬取.
如果我们在数量词+/* 后加上? 就是非贪婪爬取.
打印ab.
replaceAll 与 split¶
replaceAll:
底层:
是String的成员方法
这里的String的replaceAll是调用了Matcher中的replaceAll方法
Matcher中的replaceAll方法:
split:

如何判断某个String方法可以识别正则表达式? 形参命名为regex的一般都是.
因此,我们查看文档,会发现replace方式是不识别正则表达式的.
分组¶
分组就是一个小括号.
蓝色框的是第二组,因为是以左括号为基准的.
捕获分组:¶
处理需求时,需要"一致",就需要用这个.
第三个需求有点麻烦:
先处理"开始部分内部每个字符也需要一致"
然后呢?

正则外部使用¶

非捕获分组:¶
非捕获分组是不占用组号的.
因此,?:的作用就体现出来了.它是不占用组号的.
这个玩意是干嘛用的?主要是网上提供的表达式经常用这个.