1基础

2.1 简单字符类

构造 描述
[abc] a,b或c
[^abc] 除a,b或c外的字符
[a-zA-Z] a至z 或 A至Z
[a-d[m-p]] a至d 或 m至p
[a-z&&[def]] d,e或f
@Test
public void testChar() {
//匹配 b,c或d
assertTrue("d".matches("[bcd]"));
//匹配除 a,b,c 以外的字符 (否定)
assertTrue("d".matches("[^abc]"));
//匹配 a至z 的任一字符 (范围)
assertTrue("d".matches("[a-z]"));
//匹配 d,e或f (交集)
assertTrue("d".matches("[a-z&&[def]]"));
}

2.2 预定义字符类

构造 描述
. 任意字符
\d 一个数字 [0-9]
\D 一个非数字 [^0-9]
\s 空白字符 [ \t\n\x0B\f\r]
\S 非空字符
\w 常规字符 [a-zA-Z_0-9]
\W 非常规字符
@Test
public void testPredef() {
//匹配 任意字符 (可能不匹配行终止符)
assertTrue("d".matches("."));
//匹配 数字
assertTrue("4".matches("\\d"));
//匹配 非数字
assertTrue("d".matches("\\D"));
//匹配 空白字符 [ \t\n\x0B\f\r]
assertTrue(" ".matches("\\s"));
//匹配 非空字符
assertTrue("d".matches("\\S"));
//匹配 常规字符 [a-zA-Z_0-9]
assertTrue("d".matches("\\w"));
//匹配 非常规字符
assertTrue("!".matches("\\W"));
}

2.3 量词

贪心 勉强 描述
X? X?? X出现一次或没有
X* X*? X出现零次或多次
X+ X+? X出现一次或多次
X{n} X{n}? X出现n次
X{n,} X{n,}? X出现至少n次
X{n,m} X{n,m}? X出现至少n次,至多m次
@Test
public void testQuant() {
// * 表示出现0次或多次 (贪心,最大匹配)
assertEquals("<b>d<b>".replaceAll("<.*>","#"),"#");
// * 表示出现0次或多次,? 表示最小匹配
assertEquals("<b>d<b>".replaceAll("<.*?>","#"),"#d#");
// + 表示出现1次或多次 (贪心,最大匹配)
assertEquals("<b>d<b>".replaceAll("<.+>","#"),"#");
// * 表示出现1次或多次,? 表示最小匹配
assertEquals("<b>d<b>".replaceAll("<.+?>","#"),"#d#");
// {1} 表示出现1次
assertEquals("<b>d<b>".replaceAll("<.{1}>","#"),"#d#");
// {1,} 表示出现1次至多次
assertEquals("<b>d<b>".replaceAll("<.{1,}>","#"),"#");
// {1,8} 表示出现1次至8次
assertEquals("<b>d<b>".replaceAll("<.{1,8}>","#"),"#");
}

2.4 分组

@Test
public void testGroup() {
// () 表示分组,?表示出现0次或1次,\\d\\d表示两个数字
assertFalse("du2".matches("du(\\d\\d)?"));
// 匹配
assertTrue("du12".matches("du(\\d\\d)?"));
// 不匹配,分组条件出现了2次
assertFalse("du1212".matches("du(\\d\\d)?"));
// 匹配
assertTrue("du1212".matches("du(\\d\\d)+"));
}

2.5 边界匹配

边界构造 描述
^ 行开始
$ 行结尾
\b 单词边界
\B 非单词边界
\A 输入开始
\z 输入结尾
@Test
public void testBound() {
// ^ 行开始
assertTrue("42du".matches("^(\\d\\d)du"));
// $ 行结尾
assertTrue("42du".matches("\\d\\d(du)$"));
// \\b 表示单词边界
assertTrue("a dog".matches(".*\\bdog\\b"));
// \\B 表示非单词边界
assertTrue("a doggie".matches(".*\\bdog\\B.*"));
}

2.6 Pattern和Matcher基本

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatcherDemo {
public static void main(String[] args){
// 不区分大小写
Pattern pattern = Pattern.compile("\\bdog\\B",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("The Doggie plays");
while (matcher.find()) {
System.out.println(matcher.group());
System.out.println(matcher.start());
System.out.println(matcher.end());
}
}
}

输出

Dog
4
7

3 示例

3.1 用户名正则

/*
* ^ 开头
* [a-z0-9_-] 匹配a-z,0-9,下划线,中线
* {4,10} 长度4至10
* $ 结尾
*/
String unReg = "^[a-z0-9_-]{4,10}$";

3.2 颜色正则

/*
* ^ 开头
* # "#" 符号
* ( 开始分组
* [A-Fa-f0-9]{6} 长度为6的字母数字
* | 或
* [A-Fa-f0-9]{3} 长度为3的字母数字
* ) 分组结束
* $ 结尾
*/
String coReg = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$";

3.3 24时制时间

/*
* ( 分组开始
* [01]?[0-9] 0-9,00-09,10-19
* | 或
* 2[0-3] 20-23
* ) 分组结束
* : :符号
* [0-5][0-9] 00 至 59
*/
String tiReg = "([01]?[0-9]|2[0-3]):[0-5][0-9]";

4 结语

本文简要介绍了java正则表达式的最基础的知识内容,并给出了简单实用的小例子来理解消化所学内容。要想熟练掌握这些基础知识,还要动手多加以练习,阅读官方文档。java正则表达式的进阶的内容我会在下一篇文章里进行介绍。
推荐java正则表达式学习的一些资料:

官方:docs.oracle.com

英文:vogella.com

中文:runoob.com

java正则表达式基础知识(转)的更多相关文章

  1. Java正则表达式基础知识整理

    指定为字符串的正则表达式必须首先被编译为此类的实例.然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配.执行匹配所涉及的所有状态都驻留在匹配器中,所以多个 ...

  2. Java正则表达式基础知识及实例说明

    众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛 ...

  3. javascript之正则表达式基础知识小结

    javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料.   元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...

  4. Java 多线程——基础知识

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  5. java必备基础知识(一)

    学习的一点建议: 每一门语言的学习都要从基础知识开始,学习是一个过程,"万丈高楼平地起",没有一个好的地基,想必再豪华的高楼大厦终究有一天会倒塌.因此,我们学习知识也要打牢根基,厚 ...

  6. 什么才是java的基础知识?

    近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...

  7. java部分基础知识整理----百度脑图版

    近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...

  8. JAVA相关基础知识

    JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...

  9. Scala学习笔记--正则表达式基础知识、如何在scala内使用

    正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...

随机推荐

  1. 微信小程序开发教程(一)准备

    1.成为微信公众平台开发者 成为微信公众平台的开发者,是小程序开发的首要条件.只有成为微信公众平台的开发者,才可以使用公众平台的各种开发接口.如果你已经是开发者,则可以跳过本章. ①.进入微信公众平台 ...

  2. [Contest20171102]简单数据结构题

    给一棵$n$个点的数,点权开始为$0$,有$q$次操作,每次操作选择一个点,把周围一圈点点权$+1$,在该操作后你需要输出当前周围一圈点点权的异或和. 由于输出量较大,设第$i$个询问输出为$ans_ ...

  3. 【构造】Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) D. Artsem and Saunders

    根据那两个式子 g(h(x))=x h(g(x))=f(x) 可以推出来两个新的式子 g(f(x))=g(x) h(x)=f(h(x)) 于是,我们先找到f(x)的所有不动点,有几个不动点,m就是多少 ...

  4. 【单调队列优化DP】BZOJ1855-[Scoi2010]股票交易

    [题目大意] 已知第i天的股票买入价为每股APi,第i天的股票卖出价为每股BPi(数据保证对于每个i,都有APi>=BPi),第i天的一次买入至多只能购买ASi股,一次卖出至多只能卖出BSi股. ...

  5. Oracle常见故障问题

    1. ORA-27102: out of memory 创建pfile文件: create pfile from spfile: 修改pfile文件 修改文件/home/oracle/app/orac ...

  6. 关于scanf函数的返回值问题

    如: scanf("%d%d",&a,&b); 1.如果a和b都被成功读入,则scanf的返回值为2 2.如果只有a被成功读入,那么返回值为1 3.如果a和b都未被 ...

  7. 【报错】引入jar包import org.apache.commons.codec.digest.DigestUtils 报错,jar不存在

    import org.apache.commons.codec.digest.DigestUtils报错.缺少jar maven引用jar包地址: <!-- https://mvnreposit ...

  8. 【Node.js】1.安装步骤

    1.在官网找到对应版本下载 2.点击安装 3.检查安装成功 path可以看到node.js的安装目录已经自动配置在环境变量path中了 如果node -v或者node --version不能正确展示当 ...

  9. html5:localStorage储存

    实例:刷新值会增长,关掉浏览器,再打开,值会在原基础上增长 if(localStorage.pagecount){ localStorage.pagecount=Number(localStorage ...

  10. 微信php分享页面自定义标题与内容

    1.因为现在分享页面,发给朋友或者朋友圈都没办法自定义标题.图片和内容,所以必须要有微信公众号 2.如果有微信公众号可直接登录,如果没有要注册,注册完或者登录了 3.查看你的权限,左侧最下面开发的接口 ...