Java正则表达式学习与记录
转载自:http://www.runoob.com/java/java-regular-expressions.html
正则表达式定义了字符串的模式,用于搜索、编辑或处理文本。
1、正则表达式中字符意义:
\ 将下一字符标记为特殊字符。
^ 匹配输入字符串开始的位置。
$ 匹配输入字符串结束的位置。
* 零次或多次匹配前面的字符或子表达式。
+ 一次或多次匹配前面的字符或子表达式。
? 零次或一次匹配前面的字符或子表达式。当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。
"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,
在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。
{n} 正好匹配 n 次。
{n,} 至少匹配 n 次。
{n,m} 匹配至少 n 次,至多 m 次。
x|y 匹配 x 或 y。
[xyz] 匹配包含的任一字符。
[^xyz] 匹配未包含的任何字符。
[a-z] 匹配指定范围内的任何字符。
[^a-z] 匹配不在指定的范围内的任何字符。
\b 匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"。
\B 非字边界匹配,"er\B"匹配"verb"中的"er",但不匹配"never"中的"er"。
\d 数字字符匹配,等效于 [0-9]。
\D 非数字字符匹配,等效于 [^0-9]。
\f 换页符匹配,等效于 \x0c 和 \cL。
\n 换行符匹配,等效于 \x0a 和 \cJ。
\r 匹配一个回车符,等效于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等,与 [ \f\n\r\t\v] 等效。
\t 制表符匹配,与 \x09 和 \cI 等效。
\v 垂直制表符匹配,与 \x0b 和 \cK 等效。
\w 匹配任何字类字符,包括下划线,与"[A-Za-z0-9_]"等效。
\W 与任何非单词字符匹配,与"[^A-Za-z0-9_]"等效。
2、Java中正则表达式主要使用的类为:
- Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
- Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
用法为:
public boolean matches() 尝试将输入字符串与模式整体匹配,成功返回true,失败返回false。如果部分匹配成功,将移动到下次匹配的位置
public boolean lookingAt() 尝试将输入字符串开头开始的输入序列与该模式匹配,如果成功,则返回true,并且移动到下次匹配的位置,相当于从字符串开始位置第一次执行find()方法,start()方法和end()方法也被赋值了。
public boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列,如果成功,则返回true,并且移动到下次匹配的位置。
注意事项: matches()方法和lookingAt()方法都会从输入字符串开始匹配,并且都会影响find()的匹配结果,而find()方法不会影响matches()和lookingAt()结果。
实例:
String str = "acbcacdbc";
String regex = "a.{1,2}b"; Pattern pattern = Pattern.compile(regex);
Matcher m = pattern.matcher(str);
System.out.println("先执行matches()方法,再执行find()方法");
System.out.println(m.matches());
while (m.find()) {
System.out.println(str.substring(m.start(), m.end()));
} m.reset();
System.out.println("先执行find()方法,再执行matches()方法");
while (m.find()) {
System.out.println(str.substring(m.start(), m.end()));
}
System.out.println(m.matches()); m.reset();
System.out.println("先执行lookingAt()方法,再执行find()方法");
System.out.println(m.lookingAt());
while (m.find()) {
System.out.println(str.substring(m.start(), m.end()));
} m.reset();
System.out.println("先执行find()方法,再执行lookingAt()方法");
while (m.find()) {
System.out.println(str.substring(m.start(), m.end()));
}
System.out.println(m.lookingAt());
输出结果:
先执行matches()方法,再执行find()方法
false
acdb
先执行find()方法,再执行matches()方法
acb
acdb
false
先执行lookingAt()方法,再执行find()方法
true
acdb
先执行find()方法,再执行lookingAt()方法
acb
acdb
true
Java正则表达式学习与记录的更多相关文章
- Java NIO学习与记录(八): Reactor两种多线程模型的实现
Reactor两种多线程模型的实现 注:本篇文章例子基于上一篇进行:Java NIO学习与记录(七): Reactor单线程模型的实现 紧接着上篇Reactor单线程模型的例子来,假设Handler的 ...
- java 正则表达式学习
一. Java正则表达式 在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂. 因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 正则表达式是一种可 ...
- java正则表达式学习笔记
Java 正则表达式语法 为了更有效的使用正则表达式,需要了解正则表达式语法.正则表达式语法很复杂,可以写出非常高级的表达式.只有通过大量的练习才能掌握这些语法规则. 本篇文字,我们将通过例子了解正则 ...
- Java 正则表达式学习总结和一些小例子
从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容. java.util.r ...
- java正则表达式学习
1.简单认识正则: public class Test { public static void main(String[] args) { //简单认识正则 p("abc".ma ...
- Java NIO学习与记录(二):FileChannel与Buffer用法与说明
FileChannel与Buffer用法与说明 上一篇简单介绍了NIO,这一篇将介绍FileChannel结合Buffer的用法,主要介绍Buffer FileChannel的简单使用&Buf ...
- Java NIO学习与记录(一):初识NIO
初识 工作中有些地方用到了netty,netty是一个NIO框架,对于NIO却不是那么熟悉,这个系列的文章是我在学习NIO时的一个记录,也期待自己可以更好的掌握NIO. 一.NIO是什么? 非阻塞式I ...
- Java NIO学习与记录(七): Reactor单线程模型的实现
Reactor单线程模型的实现 一.Selector&Channel 写这个模型需要提前了解Selector以及Channel,之前记录过FileChannel,除此之外还有以下几种Chann ...
- Java NIO学习与记录(六): NIO线程模型
NIO线程模型 上一篇说的是基于操作系统的IO处理模型,那么这一篇来介绍下服务器端基于IO模型和自身线程的处理方式. 一.传统阻塞IO模型下的线程处理模式 这种处理模型是基于阻塞IO进行的,上一篇讲过 ...
随机推荐
- postman post 数据格式
postman post 数据的时候,选择raw的tab ,选择json. 然后在下面的提交json数据, {"photoPath":"bbbbbbbbbbbbbb&qu ...
- HDU-1069_Monkey and Banana
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) P ...
- Libev源码分析02:Libev中的IO监视器
一:代码流程 在Libev中,启动一个IO监视器,等待该监视器上的事件触发,然后调用该监视器的回调函数.整个的流程是这样的: 首先调用ev_default_loop初始化struct ev_loop ...
- vue init定制团队模板使用方法
每次做项目都要自己搭建项目目录,或者换了公司就的重新搭建项目目录,是不是很麻烦呢?有没有想过一次性把项目目录搭建好,以后直接用呢?你首先想到的可能是复制自己原来的项目,然后删除.修改等等.然而有个更方 ...
- 20190527-JavaScriptの打怪升级旅行 { 语句 [ 声明 ,变量 ] }
写在前面的乱七八糟:时间总是轻易地溜走,不留一丝念想,近一个月,倒是过得有点丧,从今天开始起,已经开始接触后台了,而JavaScript也只是大致有了个分类框架,那些细枝末节还有的补,任重道远,天将降 ...
- TAE words all
// vol 1 could do with sth rhinoplasty angst the wee small hours familial Munich gladi ...
- poj 1263 Reflections (Simple Geometry)
1263 -- Reflections 简单计算几何.题目给出射线以及若干个不相交的圆,求出射线会在哪些圆上反弹,依次写出反弹球的编号. 代码如下: #include <cstdio> # ...
- xml path 列转行实例
SQL Server2005提供了一个新查询语法——For XML PATH(''),这个语法有什么用呢?想象一下这样一个查询需求:有两个表,班级表A.学生表B,要查询一个班级里有哪些学生?针对这个需 ...
- Pytorch中多GPU训练指北
前言 在数据越来越多的时代,随着模型规模参数的增多,以及数据量的不断提升,使用多GPU去训练是不可避免的事情.Pytorch在0.4.0及以后的版本中已经提供了多GPU训练的方式,本文简单讲解下使用P ...
- p2p平台详细运营框架
市场拓展部1.负责完成公司市场销售.市场拓展.费用控制等年度目标任务,并负责将目标责任制分解落实,确保各项工作目标得以实现.2.对营销政策.市场及同业营销动态等方面进行调研分析,及时调整营销策略和计划 ...