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代指了查找到的子串。

正则表达式(三)——Java中的相关函数的更多相关文章

  1. 正则表达式在Java中的使用

    目录 介绍 从简单例子认识正则表达式匹配 Java中对正则表达式的支持(各种语言有相应的实现) 初步认识 . + * ? 范围 认识\s \w \d - 下面介绍数字和字母的正则表达, 这是编程中使用 ...

  2. 多线程(三) java中线程的简单使用

    java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...

  3. 正则表达式在Java中使用

    正则表达式 定义 用一组特殊的字符来描述一组字符串的格式 用于验证字符串是否满足格式 不关心字符串的内容是否有效 1. 基本正则表达式所谓正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式 ...

  4. 正则表达式在Java中应用的三种典型场合:验证,查找和替换

    正则式在编程中常用,总结在此以备考: package regularexp; import java.util.regex.Matcher; import java.util.regex.Patter ...

  5. java学习(三) java 中 mongodb的各种操作

    一. 常用查询: 1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is  精确匹配,模糊匹配 使用 regex...) public PageUrl getByUrl(String ...

  6. 正则表达式在java中的用法

    /** * 测试正则表达式的基本用法 Pattern 和 Matcher * @author 小帆敲代码 * */public class Demo01 {  public static void m ...

  7. 利用正则表达式判断Java中的秒钟、分钟、小时、日、月是否符合规则

    // 定义校验规则 Pattern patRule = Pattern.compile("判断规则"); // 校验结果 patRule.matcher("判断的对象&q ...

  8. java中的正则表达式捕获组与引用的概念

    今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个   "(([1-9]\\d?)\\s){2}$2&q ...

  9. Java中enum的学习总结

    一.通常的定义常量的方法 public class Sex{ public final static int MALE = 1; public final static int FEMALE=2; } ...

随机推荐

  1. 开源办公套件DzzOffice安装教程

    DzzOffice开源办公套件 DzzOffice是一套开源办公套件,适用于企业.团队搭建自己的 类似"Google企业应用套件"."微软Office365"的 ...

  2. python整数运算--4

    #!/usr/bin/python #coding=utf-8 i=1 j=3 print(i*j) print(i**j)

  3. MySQL8.0.28安装教程全程参考MySQL官方文档

    前言 为了MySQL8.0.28安装教程我竟然在MySQL官方文档逛了一天,至此献给想入门MySQL8.0的初学者.以目前最新版本的MySQL8.0.28为示例进行安装与初步使用的详细讲解,面向初学者 ...

  4. 1.k8s的前世今生

    k8s是Kubernetes的缩写,Google 于 2014 年开源了 Kubernetes 项目. 一.k8s的历史演变 k8s的演变过程:首先从传统的服务-->虚拟机部署-->容器部 ...

  5. Springboot整合RocketMQ解决分布式事务

    直接上代码: 代码结构如下: 依次贴出相关类: DataSource1Config: package com.example.demo.config;import org.apache.ibatis. ...

  6. AESUtil_1

    package com.tebon.ams.util;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher; ...

  7. JVM学习五:性能监控工具

    一.系统性能监控 系统性能工具用于确定系统运行的整体状态,基本定位问题所在. Linux – uptime • 系统时间 • 运行时间 n 例子中为7分钟 • 连接数 n 每一个终端算一个连接 • 1 ...

  8. 使用C++开发PHP扩展

    目前,PHP编程语言也是相当成熟,各种文档,各种问题,只要Google一下,总有你想要的答案.当然"如何开发PHP扩展"的文章也不少,但是很少有专门来介绍使用C++开发PHP扩展的 ...

  9. NSMutableString练习

    从要求讲3个520it拼接在一起 会生成很多新的字符串 NSString *res = @""; NSString *subStr = @"520"; // 1 ...

  10. CSS:第1课

    CSS选择器有:id选择器.派生选择器 1.id选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式. id 选择器以 "#" 来定义. #red {colo ...