Java-正则表达式学习总结

本文详细介绍Java中正则表达式的应用,包括Pattern类与Matcher类的使用,以及如何通过正则表达式进行字符串匹配、分组和模式控制。同时,文章提供了多个示例代码,帮助读者更好地理解和掌握Java正则表达式的高级特性。
摘要由CSDN通过智能技术生成

1.学习背景

在计算机诞生之初,主要用于相关科研计算,但是随着其逐步地平民化,在编程领域可以看到越来越多的字符串的利用,而正则表达式作为一种语法,其方便之处就在于可以利用简短的规则,将目标字符串操作实现,并且其目前已经被大多数编译器所支持。

2.Java中Pattern类、Matcher类介绍

  • Pattern类与Matcher类一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持。
  • java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现。
  • Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式。
  • 注意事项:查看JDK-API文档,可以看到complie方法调用的Pattern(String p, int f)是被private修饰的。而Pattern类中的pattern()是返回当前正则表达式(字符串),只有前者(大写的Pattern)才是Pattern类的构造器。

3.Java中Pattern类的重要方法介绍(涉及方法的重载)

3.1主要方法简介

方法名入口参数返回值修饰
pattern()正则表达式的字符串形式public String
Pattern()String p, int f此为Pattern类的构造器private
compile()String regexnew Pattern(regex, 0)创建的对象public static Pattern
compile()String regex, int flagsnew Pattern(regex, flag)创建的对象public static Pattern
toString()pattern,即正则表达式的字符串形式,和pattern()方法相同public String
matcherCharSequence inputMatcher对象public Matcher
flags()flags值public int
matches()String regex, CharSequence inputboolean值public static boolean
split()CharSequence input, int limit字符串数组(对象)public String[]
split()CharSequence input字符串数组(对象)即split(input, 0)public String[]
quote()String s字符串public static String

其中CharSequence input 一般就是需要相关操作的字符串

3.2主要方法的详细

  1. complie(String regex):此方法主要通过静态方法调用,输入一个正则表达式,返回一个Patter对象,我们将此对象称作正则表达式的对象,注意:输入的字符串所含的正则表达式原本一杠\在Java语法中都要转化为两杠\才合法。

  2. complie(String regex, int flags):此方法与上个方法类似,只不过利用flags来控制正则表达式匹配模式的选择,比如是否匹配大小写。详细见下个模块,Java中的匹配模式控制。

  3. split(CharSequence input),用于分隔字符串,并返回一个String[],举例:

    Pattern p2 =Pattern.compile("\\d+");
    String[] strings=p2.split("Hello123 World456!");
    for(String temp:strings){
        System.out.print(temp);
    }
    

    最终Console上显示:Hello World!

  4. matcher(String regex,CharSequence input)是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串。例子:
    Pattern.matches("\\d+","2223");//返回true

  5. matcher(CharSequence input) 此方法用于创建和返回一个Macher类对象,Matcher类的构造方法是仅包内可用即package-private,也就是默认的类修饰,而一般我们只是在别包中import Matcher类,所以并不能调用其构造方法。Pattern.matcher(CharSequence input)方法得到该类的实例。

3.3Java中正则表达式匹配模式的选择

Java在Pattern类中规定了9个匹配模式控制符:
public static final int UNIX_LINES = 0x01;
public static final int CASE_INSENSITIVE = 0x02;
public static final int COMMENTS = 0x04;
public static final int MULTILINE = 0x08;
public static final int LITERAL = 0x10;
public static final int DOTALL = 0x20;
public static final int UNICODE_CASE = 0x40;
public static final int CANON_EQ = 0x80;
public static final int UNICODE_CHARACTER_CLASS = 0x100;
各个字符所控制的模式选择不妨使用的时候上网搜索,不必死记硬背。

4.Java中Matcher类的方法介绍

4.1 Pattern类和Matcher类的区别和联系

Matcher类只能通过Pattern实例调用matcher(CharSequence input)方法来调用,且Pattern类只有一些简单的匹配操作,要想得到更强和便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作。Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持。
一下两个方法类似:
方法一:

Pattern p=Pattern.compile("\\w+");
Matcher m =p.matcher("string123123");
System.out.println(m.matches());

方法二:

    Pattern p =Pattern.compile("");
    System.out.println(p.matches("\\w+","string123123"));

上面两个方法说明Pattern类和Matcher类有相似的”全匹配方法“:matches()方法,而且前者实际上调用了后者的matches()方法。方法一中程序更加明确可用,这是其优点。

4.2Matcher类中方法介绍

1.public boolean lookingAt():主要进行匹配字符串开头,案例如下:

    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher("string123123");
    System.out.println(m.lookingAt());

    Pattern p2 = Pattern.compile("\\w+");
    Matcher m2 = p2.matcher("string123123");
    System.out.println(m2.lookingAt());
    
    结果为:false,true;

2.public boolean find():对字符串进行匹配,匹配到的字符串可以在任何位置,案例如下:

    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher("string123123");
    System.out.println(m.find());

    Pattern p2 = Pattern.compile("\\w+");
    Matcher m2 = p2.matcher("string123123");
    System.out.println(m2.find());
    
    结果为:true,true

3.Mathcer.start()/ Matcher.end()/ Matcher.group(),当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信。

  1. start()返回匹配到的子字符串在字符串中的索引位置(字符串最左侧为索引:0值)

  2. end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置(成立的末尾后一个)

  3. group()返回匹配到的子字符串
    案例分析:

    Pattern p = Pattern.compile("[a-z]+");
    Matcher m = p.matcher("123string123");
    System.out.println(m.find());
    System.out.println(m.start());
    System.out.println(m.end());
    System.out.println(m.group());
    
    控制台输出:
    true
    3
    9
    string
    

4.start(int i),end(int i),group(int i),此三个方法为上诉三个方法的重载,主要用于分组的相关参数显示(小括号()为一个分组),不输入则默认第一组,举例:

    Pattern p = Pattern.compile("([a-z]+)+(\\d+)");
    Matcher m = p.matcher("123string123");
    System.out.println(m.find());
    System.out.println(m.start());
    System.out.println(m.start(1));
    System.out.println(m.start(2));
    System.out.println(m.end());
    System.out.println(m.end(1));
    System.out.println(m.end(2));
    System.out.println(m.group());
    System.out.println(m.group(1));
    System.out.println(m.group(2));

	控制台输出:
	true
	3
	3
	9
	12
	9
	12
	string123

5.注意事项

  • 每次执行匹配操作后start(),end(),group()三个方法的值都会改变,改变成匹配到的子字符串的信息,以及它们的重载方法,也会改变成相应的信息.
  • 只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值