转载自:http://www.runoob.com/java/java-regular-expressions.html

正则表达式定义了字符串的模式,用于搜索、编辑或处理文本。

1、正则表达式中字符意义:

\            将下一字符标记为特殊字符。

^           匹配输入字符串开始的位置。

$           匹配输入字符串结束的位置。

*           零次或多次匹配前面的字符或子表达式。

+           一次或多次匹配前面的字符或子表达式。

?           零次或一次匹配前面的字符或子表达式。当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。

"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,

在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。

{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正则表达式学习与记录的更多相关文章

  1. Java NIO学习与记录(八): Reactor两种多线程模型的实现

    Reactor两种多线程模型的实现 注:本篇文章例子基于上一篇进行:Java NIO学习与记录(七): Reactor单线程模型的实现 紧接着上篇Reactor单线程模型的例子来,假设Handler的 ...

  2. java 正则表达式学习

    一. Java正则表达式 在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂. 因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 正则表达式是一种可 ...

  3. java正则表达式学习笔记

    Java 正则表达式语法 为了更有效的使用正则表达式,需要了解正则表达式语法.正则表达式语法很复杂,可以写出非常高级的表达式.只有通过大量的练习才能掌握这些语法规则. 本篇文字,我们将通过例子了解正则 ...

  4. Java 正则表达式学习总结和一些小例子

    从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容. java.util.r ...

  5. java正则表达式学习

    1.简单认识正则: public class Test { public static void main(String[] args) { //简单认识正则 p("abc".ma ...

  6. Java NIO学习与记录(二):FileChannel与Buffer用法与说明

    FileChannel与Buffer用法与说明 上一篇简单介绍了NIO,这一篇将介绍FileChannel结合Buffer的用法,主要介绍Buffer FileChannel的简单使用&Buf ...

  7. Java NIO学习与记录(一):初识NIO

    初识 工作中有些地方用到了netty,netty是一个NIO框架,对于NIO却不是那么熟悉,这个系列的文章是我在学习NIO时的一个记录,也期待自己可以更好的掌握NIO. 一.NIO是什么? 非阻塞式I ...

  8. Java NIO学习与记录(七): Reactor单线程模型的实现

    Reactor单线程模型的实现 一.Selector&Channel 写这个模型需要提前了解Selector以及Channel,之前记录过FileChannel,除此之外还有以下几种Chann ...

  9. Java NIO学习与记录(六): NIO线程模型

    NIO线程模型 上一篇说的是基于操作系统的IO处理模型,那么这一篇来介绍下服务器端基于IO模型和自身线程的处理方式. 一.传统阻塞IO模型下的线程处理模式 这种处理模型是基于阻塞IO进行的,上一篇讲过 ...

随机推荐

  1. typeid, const_cast<Type>的使用

    #include <bits/stdc++.h> using namespace std; class A { public : void Show() { cout << & ...

  2. IO流实现文件及文件夹的复制

    TestCopyDocuments.java package com.sxt.parc; /* * 复制文件夹 包含文本 视频 音频 用字节流 */ import java.io.BufferedIn ...

  3. idea 启动一直一直build以及勉勉强强的解决方案

    周日做了一个密匙解析的功能,在idea的springboot项目的该类上写了个main方法测试,当时一直提示build,没在意,直接打开eclipse上写 今天早上发现 idea启动springboo ...

  4. Libev源码分析03:Libev使用堆管理定时器

    Libev中在管理定时器时,使用了堆这种结构,而且除了常见的最小2叉堆之外,它还实现了更高效的4叉堆. 之所以要实现4叉堆,是因为普通2叉堆的缓存效率较低,所谓缓存效率低,也就是说对CPU缓存的利用率 ...

  5. hdu 3938 Portal (prim+离线)

    Problem - 3938 题意是要求出给定权值下,满足要求的点对的数目.所谓的要求是,给出两点,之间会有很多路径,这个点对的最小距离是众多路径中,最短的一条路径的长度,路径长度是路径上最长边的长度 ...

  6. 2008年NOIP普及组复赛题解

    题目涉及算法: ISBN号码:简单字符串模拟: 排座椅:贪心: 传球游戏:动态规划: 立体图:模拟. ISBN号码 题目链接:https://www.luogu.org/problem/P1055 简 ...

  7. Python--day66--内容回顾

    3,python中的大小比较和js中的大小比较规则: python中a>b>c,就是先比较a>b,然后再比较b>c,都为true的话就返回true: js中的a>b> ...

  8. 用adblock过滤页面上固定位置的悬浮窗

    现在各种网站都喜欢加入position:fixed的悬浮窗,这些悬浮窗可以是分享按钮,可以是二维码,可以是各种烦人的按钮. 因为这些悬浮窗未必是广告,所以adblock很少自动屏蔽它们. 可这些悬浮窗 ...

  9. Vue vue-resource三种请求数据方式pet,post,jsonp

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Vue 属性绑定v-bing 事件绑定v-on

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...