1、前言

之前在学习Python时,我已经说过正则表达式的相关语法,这里不再赘述了,有需要可以参考:

2020.10.7 正则表达式(一) - ShineLe - 博客园

现在开始学习Java中的正则表达式匹配。

需要注意的是Java中用\\代表\,Python中的\d在Java中写为\\d

2、模块:java.util.regex.*

3、用法

3.1、预编译正则字符串:Pattern.compile( regrex_string )

Pattern p = Pattern.compile( regrex_string );

3.2、用Pattern匹配目标字符串:matcher()

Matcher m = p.matcher( Obj_String );

3.3、分组提取:group()

String s = m.group( n );//提取匹配到的第n项

n取0时是整个字符串;取1时是第一个子串;取2时是第二个子串...

注意

分组提取之前,必须首先调用matches()判断是否匹配成功,成功后才能调用group()提取子串。

完整例子

import java.util.regex.*;

public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})");
Matcher m = p.matcher("010-12345678");
if(m.matches()){
String g1 = m.group(1);
String g2 = m.group(2);
System.out.println(g1);
System.out.println(g2);
}
else{
System.out.println("匹配失败");
}
}
}

4、非贪婪匹配:末尾补?,尽量少匹配

正则表达式默认使用贪婪匹配:任意规则,它总是尽可能多地向后匹配。

比如,一串数字123000以若干个0结尾,要分别提取数字和0,那么很多人都会认为正则字符串应当写为"(\\d+)(0*)"。但是提取的结果是"123000"和"",就是由于贪婪匹配造成的。

要让\d+少匹配,0*多匹配,我们就要让\d+使用非贪婪匹配,在之后添加?写为\d+?即可实现。

区分?的含义

\d??,第一个?表示0或1个数字,加上第二个?表示非贪婪匹配,尽量少匹配,所以实际上匹配0个数字。

5、方法

5.1、分割字符串:String.split( regex_string )

String的split()方法支持用正则表达式分割字符串。

5.2、搜索:matcher.find()

我们获取到Matcher对象后,调用find()方法,返回的是符合匹配规则的子串。

不断调用find()就能得到所有符合规则的子串了。

5.3、替换字符串:s.replaceAll( regex , Obj_String )

把String s中的所有符合regex的子串替换为Obj_String。

5.4、反向引用:$1、$2、$3....

替换时,如果想用某个特定字符串指代查找到的子串,可以用$1、$2...代指,比如,给查找到的字符串前后加<b>和</b>,那么在replaceAll时,传入的第二个参数(也就是替换成的新串)可以写成<b>$1</b>。

例子:给String中的所有四字子串前后加上<b>与</b>

String s = "the quick brown fox jumps over the lazy dog.";
String r = s.replaceAll("\\s([a-z]{4})\\s", " <b>$1</b> ");
//r = the quick brown fox jumps <b>over</b> the <b>lazy</b> dog.

本例中,就是用$1代指了查找到的子串。

最新文章

  1. Javascript学习笔记:2种其他类型转换为数字Number类型的方式
  2. asp.net lodop单个打印
  3. &lt;&lt;面向模式的软件架构2-并发和联网对象模式&gt;&gt;读书笔记
  4. php工作笔记1-数组常用方法总结,二维数组的去重,上传图片到oss服务器
  5. 表单验证Jquery扩展方法类
  6. Contest2037 - CSU Monthly 2013 Oct (problem A :Small change)
  7. Android 内核初识(2)android系统架构
  8. xml复习
  9. 转:二十、java的抽象类
  10. 程序集引用异常 处理 app.config内控制runtime运行时应用的程序集版本指向 assemblyBinding结点 bindingRedirect
  11. 6、第六课,js jquery20150928
  12. Git 配置editor编辑器
  13. NuGet安装及简单使用
  14. TypeScript入门知识二(参数新特性)
  15. JVM内存异常与常用内存参数设置总结
  16. 十二、u-boot 调试--串口修改
  17. 查看linux系统的运行级别
  18. Shiro授权管理
  19. coding利用Webhook实现Push代码后的jenkins自动构建
  20. ubuntu and centos各种上网代理设置

热门文章

  1. 安装python3.6,设为默认,yum不能用
  2. 学习Java第9天
  3. Python 单元测试 实战演练
  4. Matplotlib 3.0 秘籍&#183;翻译完成
  5. EKS助力小白实践云原生——通过k8s部署wordpress应用
  6. Java UDP实现聊天功能代码【转】
  7. ubuntu 终端乱码
  8. Class.getResource和ClassLoader.getResource的路径写法
  9. PHP面试常考内容之Memcache和Redis(1)
  10. windows 使用自带的cmd终端进行文件MD5校验