正则表达式的使用(Java)

概述

本文主要介绍正则表达式的代码使用
学习正则表达式的基本语法,可以参考使用手册:https://tool.oschina.net/uploads/apidocs/jquery/regexp.html

但是有几个问题需要特别注意:

① 转义符号 \ 的问题

比如,我们需要匹配一个数字,对应的正则表达式是:\d,因为在 Java 中正则表达式是通过字符串的形式表示的,所以,在 Java 中对应的写法为:"\\d"


正则表达式的作用

正则表达式的作用有两个:

  • ① 匹配:判断给定的字符串是否符合格式,比如:邮箱地址匹配、密码安全性验证。
  • ② 捕获:查找给定文本,提取出固定格式的字符串,比如:提取出文本中所有的电话号码。

匹配的使用

匹配的使用比较简单,具体代码如下:

//需要匹配的字符串
String str = "abc";

//对应的正则表达式
String regexStr = "[a-z]{3}";

//使用如下代码进行匹配
Pattern p = Pattern.compile(regexStr);
Matcher m = p.matcher(str);
System.out.println(m.matchers());

更简化的写法:

System.out.println("abc".matches("[a-z]{3}"));

捕获的使用

要理解捕获,需要引入一个概念:

捕获组: 给定一个正则表达式:((A)(B(C))),在进行正则表达式匹配查找之后,会产生一个捕获组,顺序为:((A)(B(C))) (A) (B(C)) (C),分别对应编号:0 1 2 3。我们可以使用这个编号从捕获组中得到对应的字符串。

具体代码如下:

String str = "This order was placed for QT3000! OK?";
String regexStr = "(\\D*)(\\d+)(.*)";

Pattern p = Pattern.compile(regexStr);
Matcher m = p.matcher(str);
if (m.find( )) {
    System.out.println("Found value: " + m.group(0) );//This order was placed for QT3000! OK?
    System.out.println("Found value: " + m.group(1) );//This order was placed for QT
    System.out.println("Found value: " + m.group(2) );//3000
    System.out.println("Found value: " + m.group(3) ); //! OK?
} else {
    System.out.println("NO MATCH");
}

注意(pattern) (?:pattern) (?=pattern)等表达式是否会消耗字符,是否会产生捕获,详情可以看文档:https://tool.oschina.net/uploads/apidocs/jquery/regexp.html


Matcher 类

Matcher类有很多功能强大的 API,使用可以参考菜鸟教程:https://www.runoob.com/java/java-regular-expressions.html。


参考

[1] 正则表达式使用手册:https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
[2] 菜鸟教程:https://www.runoob.com/java/java-regular-expressions.html
[3] 如何在 Java 中使用正则表达式:https://mp.weixin.qq.com/s/IcATjoRJrOhNQxy9ouderA

你可能感兴趣的:(正则表达式的使用(Java))