正则表达式(三)——Java中的相关函数
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中的相关函数的更多相关文章
- 正则表达式在Java中的使用
目录 介绍 从简单例子认识正则表达式匹配 Java中对正则表达式的支持(各种语言有相应的实现) 初步认识 . + * ? 范围 认识\s \w \d - 下面介绍数字和字母的正则表达, 这是编程中使用 ...
- 多线程(三) java中线程的简单使用
java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...
- 正则表达式在Java中使用
正则表达式 定义 用一组特殊的字符来描述一组字符串的格式 用于验证字符串是否满足格式 不关心字符串的内容是否有效 1. 基本正则表达式所谓正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式 ...
- 正则表达式在Java中应用的三种典型场合:验证,查找和替换
正则式在编程中常用,总结在此以备考: package regularexp; import java.util.regex.Matcher; import java.util.regex.Patter ...
- java学习(三) java 中 mongodb的各种操作
一. 常用查询: 1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is 精确匹配,模糊匹配 使用 regex...) public PageUrl getByUrl(String ...
- 正则表达式在java中的用法
/** * 测试正则表达式的基本用法 Pattern 和 Matcher * @author 小帆敲代码 * */public class Demo01 { public static void m ...
- 利用正则表达式判断Java中的秒钟、分钟、小时、日、月是否符合规则
// 定义校验规则 Pattern patRule = Pattern.compile("判断规则"); // 校验结果 patRule.matcher("判断的对象&q ...
- java中的正则表达式捕获组与引用的概念
今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个 "(([1-9]\\d?)\\s){2}$2&q ...
- Java中enum的学习总结
一.通常的定义常量的方法 public class Sex{ public final static int MALE = 1; public final static int FEMALE=2; } ...
随机推荐
- 微前端框架 之 single-spa 从入门到精通
前序 目的 会使用single-spa开发项目,然后打包部署上线 刨析single-spa的源码原理 手写一个自己的single-spa框架 过程 编写示例项目 打包部署 框架源码解读 手写框架 关于 ...
- 【Containerd版】Kubeadm高可用安装K8s集群1.23+
目录 基本环境配置 节点规划 网段规划及软件版本 基本配置 内核升级配置 K8s组件及Runtime安装 Containerd安装 K8s组件安装 高可用实现 集群初始化 Master01初始化 添加 ...
- Python打印JSON中中文的解决办法
code #!/usr/bin/python # encoding=utf-8 import json data = [{"a": "中文"}] print j ...
- Linux配置 ElasticSearch
一.什么是ElasticSearch? 一.什么是ES? ES是一个分布式使用RestFul风格的数据搜索引擎,并且ES是构建在Lucene框架之上,也就是说ES也是基于Lucene进行开发的搜索引擎 ...
- 2022.02.05 DAY2
前言 今天陪老姐送对象去安庆了,上午还去了西风禅寺求了个签,第一次拿到中评签,看来今年还需要继续努力哈哈哈.一直到晚上才有时间去做点题目,今天依旧是leetcode. 题目 leetcode 1 两数 ...
- ApacheCN Linux 译文集(二) 20211206 更新
CentOS7 Linux 服务器秘籍 零.前言 一.安装 CentOS 二.配置系统 三.管理系统 四.用 YUM 管理包 五.管理文件系统 六.提供安全性 七.构建网络 八.使用文件传输协议 九. ...
- 关于C++ scanf的一个小知识
关于C++的scanf,其实在使用时有一个注意的点. 我们来看一个简单的例子. 对于输入的一行,如果这一行的开头需要输入一个字符,例如这样的输入: A 10 20 B 30 A 3 50 ... 我们 ...
- IDE中集成widfly
第一步:添加JBOss服务器,Tomcat同理添加 第二步:选择刚刚部署好的服务器 第三步:启动服务: 注意:与Tomcat略有不同的是,启动的根目录可能不相同,导致一直404 查看启动的根目录: 注 ...
- 【AGC035D】Add and Remove(脑洞 DP 分治)
题目链接 大意 给出\(N\)个数的序列,每次操作可以选择连续的三个数,将中间的那个数抽出,将另外两个数的数值加上中间那个数的数值. 一直执行以上操作直到只剩最后两个数,求最后两个数的所有可能的和的最 ...
- LeetCode随缘刷题之回文数
package leetcode.day_01_30; /** * 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . * <p> * 回文数是指正 ...