博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java正则表达式基础知识(转)
阅读量:4451 次
发布时间:2019-06-07

本文共 3515 字,大约阅读时间需要 11 分钟。

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
@Testpublic 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 非常规字符
@Testpublic 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次
@Testpublic void testQuant() {    // * 表示出现0次或多次 (贪心,最大匹配)    assertEquals("d".replaceAll("<.*>","#"),"#");    // * 表示出现0次或多次,? 表示最小匹配    assertEquals("d".replaceAll("<.*?>","#"),"#d#");    // + 表示出现1次或多次 (贪心,最大匹配)    assertEquals("d".replaceAll("<.+>","#"),"#"); // * 表示出现1次或多次,? 表示最小匹配 assertEquals("d".replaceAll("<.+?>","#"),"#d#"); // {1} 表示出现1次 assertEquals("d".replaceAll("<.{1}>","#"),"#d#"); // {1,} 表示出现1次至多次 assertEquals("d".replaceAll("<.{1,}>","#"),"#"); // {1,8} 表示出现1次至8次 assertEquals("d".replaceAll("<.{1,8}>","#"),"#");}

 

2.4 分组

@Testpublic 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 输入结尾
@Testpublic 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());        }    }}

 

输出

Dog47

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正则表达式学习的一些资料:

官方:

英文:

中文:

转载于:https://www.cnblogs.com/acuier/p/6851756.html

你可能感兴趣的文章
使用UltraEdit+BCC5.5搭建C语言学习环境(转)
查看>>
485收发控制器:
查看>>
mssql死锁
查看>>
读取iOS plist文件 (其实类似读取xml文件)
查看>>
wps的几个优点
查看>>
Swift 可选链
查看>>
Servlet的入门案例
查看>>
获取请求参数乱码的问题
查看>>
代码实现:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称...
查看>>
Android客户端测试点
查看>>
Jquery:怎样让子窗体的div显示在父窗体之上
查看>>
01概率
查看>>
.NET LINQ 元素操作
查看>>
51nod 1020
查看>>
Shell脚本
查看>>
MatLab Load cv::Mat 导入数据
查看>>
html+css相关笔记(一)
查看>>
基于块流协议保证音频优先发送
查看>>
关于互联网的一些数据
查看>>
nginx+lua_nginx+GraphicsMagick生成实时缩略图
查看>>