java 正则表达式
前言
正则表达式的基础部分已经学习完毕,接下来是学习java提供的正则表达式的库
库说明
java提供的 java.util.regex 包 主要包含下面三个类:
- Pattern类 这个是用来设置正则表达式和对正则表达式进行编译,和得到Matcher类对象
- Matcher类 这个是用匹配数据和存放匹配结果的,我们可以通过这个类获得匹配好的数据和修改数据
- PatternSyntaxException类 这个看名字就知道是一个异常类,用来表示正则表达式中的语法错误
我们接下来就是学习这两个类
Pattern类
这个类的构造方法是私有的,我们不能通过new的方法来创建对象,只能通过它提供的静态方法compile来创建对象
1 | Pattern compile = Pattern.compile("hello"); // 基本匹配 |
我们发现这和标准的正则表达式 / pattern /flag 有些区别,它的匹配模式和标志符不在同一个字符串中, 我们需要使用传递参数的方式去给定标志符
以下是一些常见的 Pattern 标志:
- CASE_INSENSITIVE:不区分大小写。
- MULTILINE:启用多行模式。
- DOTALL:允许点(.)匹配包括换行符在内的任意字符。
- UNICODE_CASE:启用 Unicode 感知的大小写折叠。
- CANON_EQ:启用规范等价匹配。
如果需要多个标志位一起使用需要使用 | 连接,
1 | Pattern compile = Pattern.compile("hello"); // 基本匹配 |
我们可能会好奇,为什么没有全局匹配呢?,那是因为全局匹配我们不需要去设置,可以在代码中迭代获取所有匹配,在java中它不是一次性把所有的字符串进行匹配,它是需要我们通过代码控制它一次一次往下面进行匹配
Matcher类
这个类的构造方法是Default,我们不能使用的时候new 这个类的对象出来,我们可以通过定义好的Pattern类对象去获得
1 | Matcher matcher = compile1.matcher("helloworldhelloworld"); |
这样是不是很合理,你得先有了匹配模式,然后用这个匹配模式得到一个匹配类对象
方法介绍
索引
1 | public int start(); // 返回这次匹配成功字符串的起始位置 如果没有进行匹配或者没有匹配到会抛出异常 |
查找
1 | public boolean lookingAt();//从开头开始查找,查看是否有匹配的字符串,这个方法会将查找区域移动到开头,会影响后面的查找,必须是开头的连续字符串符合要求才能算成功 |
这些查找方法中,无论查找成功与否,都会向后移动查找区域
分组
1 | public String group(); // 返回整个匹配的字符串 |
如果在没有查找成功的情况下,使用这些方法会抛出异常
替换方法
1 | // 在当前匹配到的结果位置的到这次匹配区域开头的所有字符串后拼接在replacement,然后将拼接好的字符串拼接到sb中 |
输出结果
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 戴晶明的个人博客!
评论