正则表达式,不止是java支持,有很多语言都支持正则表达式,严格意义上来说,正则表达式已经不仅仅是一个表达式那么简单而已,从某种角度上看,称之为“正则表达式语言”也毫不为过。本篇文章讨论的是什么,不是正则表达式有哪些部分组成,也不给你详细列出正则表达式的元字符有哪些,量词有哪些,只说说在java里面怎么使用正则表达式。
java里面如果想使用正则表达式,有两个类必须要知道,也就是标题里面的Pattern和Matcher。Pattern用于编译你书写的正则表达式为Pattern的实例对象pattern,再通过这个实例对象pattern获取匹配到的内容,匹配到的内容存放在Matcher的对象matcher中。我们看下面的例子,简单而又囊括了该说的知识点。
主要功能:获取一个类似“23.53万美元”美元的各个部分,已知:
1.数字部分可以是负数
2.数字部分可能是小数也可能是整数
3.后边的单位是汉字,可有可无
package com.sms.service.impl; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ConfigServiceImpl { public static void main(String[] args) { String registCapi="aaaa23.53万美元"; //第二个参数是设置匹配的模式。这里分别设置了不区分大小写和多行匹配 Pattern pattern = Pattern.compile("([-]?\\d+(\\.\\d+)?)([^\\w]*)", Pattern.CASE_INSENSITIVE|Pattern.MULTILINE); Matcher matcher = pattern.matcher(registCapi); if (matcher.find()) { //相当于matcher.group();代表匹配到的整体 String input = matcher.group(0); //第一个分组([-]?\\d+(\\.\\d+)?)匹配到的内容 String num= matcher.group(1); //第二个分组(\\.\\d+)?匹配到的内容 String dotNum= matcher.group(2); //第三个分组([^\\w]*)匹配到的内容 String unit = matcher.group(3); System.out.println(input); System.out.println(num); System.out.println(dotNum); System.out.println(unit); } } }
执行结果:
23.53万美元 23.53 .53 万美元
代码说明:
1.public Pattern Pattern.compile(String regex, int flags)方法,第一个参数是要求你自己书写正则表达式了,如何书写正则表达式这个问题暂时不是本篇文章讨论的,第二个是设置匹配的模式,如Pattern.CASE_INSENSITIVE表示等下使用pattern.matcher(registCapi)匹配的时候不区分大小写,Pattern.MULTILINE表示要被匹配的输入字符串可能有很多行(比如是从文本文件中读取进来的),如果加了这个标志,那么表示所有行都参与匹配,否则就只匹配文本的第一行。
2.如何获取匹配到的内容,使用matcher.group(参数)即可,我们知道"()"在正则表达式里面表示分组,这里因为我用到了分组,所以有group(1)、group(2)之说,如果没有分组,我们使用只使用matcher.group(0);获取匹配到的整体即可。当没有匹配到的时候,如果企图获取group,将会报错,所以加了个if (matcher.find()) {}确保匹配不到的时候也不会报错
3.mather.find()作用是在输入的字符串中发现我们匹配到的内容,当能匹配到时返回true,否则返回false。
4.分别把输入值registCapi替换成其他值测试一下,以便加深理解吧,各位。