Java中使用正则表达式
迅速上手:在其他语言中会使用正则表达式请参考如下代码示例
Pattern p = Pattern.compile("需要匹配的正则表达式");
Matcher m = p.matcher("需要匹配的文本");
while(m.find()){ //寻找下一个匹配的子文本String s = m.group(); //提取System.out.println(s); //输出
}
如不会,以下是详细介绍
一、正则表达式及其语法
正则表达式是文本匹配的一种方法。
一些常用的语法如下:
条件
. - 匹配除换行符以外的所有字符。
\d,\w,\s - 匹配数字、字符、空格。
\D,\W,\S - 匹配非数字、非字符、非空格。
我iHIT - 匹配 我iHIT 整个字符串。
[我Hit] - 匹配 我、H、i、t 中的一个字符。
[a-z] - 匹配 a 到 z 中的一个字母。
[^a我c] - 匹配除了 a、我、c 的其他一个字符。
HIT|hit - 匹配 HIT 或 hit。
通配符
加在条件后方,限制条件的匹配次数。
? - 重复 0 次或 1 次。\n* - 重复 0 次或多次。
+ - 重复 1 次或多次。
{n} - 重复 n次。
{n,} - 重复 n次以上。
{m,n} - 重复最少 m 次,最多 n 次。
示例
HIT.*学院 - 匹配任意同时顺次存在HIT和学院的文本。
20[0-9]{2}年 - 匹配包含2000年~2099年任意之一的文本。
在线测试
一款很好用的在线测试工具:https://c.runoob.com/front-end/854/
二、Java中使用正则表达式
2.1 java.util.regex
import java.util.regex.Matcher; //正则表达式匹配器
import java.util.regex.Pattern; //正则表达式的对象
2.2 判断文本能否全匹配
String.matches("需要匹配的正则表达式");
返回能否被给出的正则表达式全匹配,即没有多余字符。
示例
本示例展示一个投票系统的选项及对应值的生成。
用户输入一个符合形如:“选项1”(数值1)|“选项2”(数值2)|… 的文本,可以生成这样的选项:
- 选项1 (其值为数值1)
- 选项2 (其值为数值2)
- …
如何生成将在2.3节中叙述。
此处我们先判断用户输入的字符串是否合法(符合形如上述要求的字符串):
String str = "“支持”(1)|“反对”(-1)|“弃权”(0)";
String regexp = "(“.*?”\\(-?\\d\\)\\|)*(“.*?”\\(-?\\d\\))";
str.matches(regexp); //true
str = "sadhkjasdkh";
str.matches(regexp); //false
2.3 获得匹配的字符串文本
光看能否匹配没有什么用,我们最好还能将其中匹配的部分提取出来,此部分介绍从匹配文本中提取目标文本的方法。
比如提取例子中的选项名“支持”和选项值“1”。
1、使用Pattern类的静态方法创建正则表达式对象
Pattern p = Pattern.compile("需要匹配的正则表达式");
2、创建匹配器对象
Matcher m = p.matcher("需要匹配的文本");
3、使用匹配器对象
while(m.find()){ //寻找下一个匹配的子文本String s = m.group(); //提取System.out.println(s); //输出
}
示例
仍然使用2.2节投票系统的例子。
其中 options 是一个 Map,其键为选项名,值为选项值。
//传入的字符串为var str = "“支持”(1)|“反对”(-1)|“弃权”(0)";var options = new HashMap<String, Integer>();// 创建 Pattern 对象// 用于匹配 “支持”(1)Pattern r = Pattern.compile("(“.*?”\\(-?\\d\\)\\|?)");// 用于匹配 “支持”Pattern rp = Pattern.compile("“.*?”");// 用于匹配 (1)Pattern rv = Pattern.compile("\\(-?\\d\\)");// 用于匹配 1Pattern ri = Pattern.compile("-?\\d");// 创建 matcher 对象Matcher m = r.matcher(str);while(m.find()) {var s = m.group(); // “支持”(1)var mp = rp.matcher(s);mp.find();var opt = mp.group(); //“支持”opt = opt.substring(1, opt.length()-1); //支持var vacm = rv.matcher(s);vacm.find();var valm = ri.matcher(vacm.group()); // (1)valm.find();var val = Integer.parseInt(valm.group()); //1options.put(opt, val);}return options;
得到的options的结果为:
- 支持 (其值为1)
- 弃权 (其值为0)
- 反对 (其值为-1)
Java中使用正则表达式相关推荐
- java js 正则表达式_如何在JavaScript与Java中使用正则表达式
如何在JavaScript与Java中使用正则表达式 发布时间:2021-02-11 13:16:01 来源:亿速云 阅读:69 作者:Leah 如何在JavaScript与Java中使用正则表达式? ...
- java 中的正则表达式_Java中的正则表达式–软介绍
java 中的正则表达式 正则表达式是一种可以应用于文本(Java中的String)的模式. Java提供了java.util.regex包,用于与正则表达式进行模式匹配. Java正则表达式与Per ...
- java正则表达式性能_译:Java 中的正则表达式性能概述
译者:Darren Luo 1. 概述 在本快速教程中,我们将展示模式匹配引擎是如何工作的.我们还将介绍在 Java 中优化正则表达式的不同方式. 有关正则表达式的的使用介绍,请参阅此文. 2. 模式 ...
- Java中的正则表达式 - Java Regex示例
Java中的正则表达式 - Java Regex示例 欢迎使用Java中的正则表达式.它在Java中也称为Regex.当我开始编程时,java正则表达式对我来说是一场噩梦.本教程旨在帮助您掌握Java ...
- 详解Java中的正则表达式
详解Java中的正则表达式,并列出常用的正则表达式语法和一些常用的场景. 判断一个字符串是否是由数字组成: 当不使用正则表达式的时候的实现代码: public class RegexDemo01 {p ...
- java 正则表达式 判断 日期_怎么在java中利用正则表达式对时间日期进行判断
怎么在java中利用正则表达式对时间日期进行判断 发布时间:2020-12-08 16:18:34 来源:亿速云 阅读:105 作者:Leah 这篇文章给大家介绍怎么在java中利用正则表达式对时间日 ...
- java中,正则表达式的使用 (最普通使用,Group,贪婪模式)
目录 0.最普通的使用 1.正则表达式有Group功能. 2.正则表达式中的贪婪模式, 非贪婪模式(*?) 3.find() 与 matches() 之间的区别 ↓循环获取所有文件 ↓文件内部内容读取 ...
- Java中的正则表达式 regex
常用类解析:正则表达式 regex 前言 一.正则表达式 二.匹配规则 三.匹配任意字符 四.匹配数字 五.匹配常用字符 六.匹配空格字符 七.匹配非数字 八.重复匹配 九.正则表达式小总结 十.匹配 ...
- java中的正则表达式类---表情转换实例
Java中的正则表达式类 ________________________________________ public interface MatchResult 匹配操作的结果. 此接口包含用于确 ...
- 【JavaSE】java中的正则表达式(从0到1学会正则表达式)
文章目录 前言 一.正则表达式的三个常用类 1.Pattern类 2.Matcher类 3.PatternSyntaxException类 二.正则表达式的底层实现 1.Matcher.find()和 ...
最新文章
- NodeJS + Aliyun 实现 DDNS
- RxJava 教程第一部分:入门之 生命周期管理
- python阻塞和非阻塞_Python基础必备知识:同步异步阻塞非阻塞
- 汇编语言——十种寻址方式
- Hadoop下如何执行脚本
- 基于HTML5技术的电力3D监控应用(三)
- Flex4之皮肤定制
- java 反射抽象_Java实现抽象工厂模式+java的反射的机制
- OpenCV学习(7) 分水岭算法(1)
- java并发队列之DelayQueue
- C语言之简单通讯录制作
- AM调制解调matlab实验报告,基于MATLAB的AM调制解调系统仿真报告
- 为了防止世界被破坏,春运的抢票攻略在等着你们
- 苹果计算机远程桌面连接,Mac电脑怎么远程桌面连接?
- 【模型 6.0】以前的你遇事不知所措,现在的你可以镇定自若,靠它!
- 计算机分辨率无法调整,电脑分辨率调不了怎么办?电脑分辨率不能调的解决方法...
- 魔改一个自以为不太好的简历
- 经典的W2kXP添加删除硬件
- Credential Provider
- Testudo:Spartan + Groth16 的R1CS ZKP证明系统
热门文章
- Python反编译apk,获取各类信息
- 存储器容量大小和芯片选择
- 服务器安装虚拟声卡,虚拟声卡安装使用 虚拟声卡注意事项
- 跨越鸿沟:计算机视觉-学术界与工业界的GAP有多大?
- 一阶惯性环节如何实现跟踪性能与滤波性能共存(一)
- c语言编程软件平板_notepad++可编译C版下载-notepad++可编译C语言版下载2017版-西西软件下载...
- 苹果手机怎么编程c语言,C语言编程ios版下载_C语言编程苹果版
- 新浪微博与腾讯微博的开放平台比较 -- 从程序员的角度
- python工厂模式和单例模式_python之单例模式和工厂模式
- 拥有16年开发经验,我都使用了什么工具?[最近更新:2017-10-12]