正则表达式

正则表达式本质上是一种字符串操作语法规则,利用它我们能更加灵活地实现字符串的匹配、拆分、替换等操作。

正则标记

所有的正则表达式支持的类都定义在java.util.regex包里面。这个包里面定义了如下两个主要的类:
1.Pattern类:主要定义要使用的表达式对象
2.Matcher类:用于进行正则标记与指定内容的匹配操作。

所有可以使用的正则标记都在java.util.regex.Pattern类说明文档中定义,常用的标记有如下6类:

1.单个字符(数量:1)

  • 字符:表示由一位字符组成;
  • \\\:表示转义字符“\”;
  • \t:表示一个“\t”符号;
  • \n:表示一个“\n”符号;

2.字符集(数量:1)

  • [abc]:表示可能是字符a、字符b、字符c中的任意一位;
  • [^abc]:表示不是字符a,b、c中的任意一位;
  • [a-z]:所有的小写字母;
  • [a-zA-Z]:表示任意的一位字母,不区分大小写;
  • [0-9]:表示任意的一位数字;

3.简化的字符集表达式(数量:1)

  • .:表示任意的一位字符;
  • \d:等价于“[0-9]”,属于简化写法;
  • \D:等价于“[^0-9]”,属于简化写法;
  • \s:表示任意的空白字符,例如:“\t”、“\n”;
  • \S:表示任意的非空白字符;
  • \w:等价于“[a-zA-Z_0-9]”,表示由任意的字母、数字、_组成;
  • \W:等价于“[a-zA-Z_0-9]”,表示不是由任意的字母、数字、_组成;

4.边界分配

  • ^:正则的开始;
  • $:正则的结束;

5.数量表达

  • 正则?:表示此正则可以出现0次或1次;
  • 正则+:表示此正则可以出现1次或1次以上;
  • 正则*:表示此正则可以出现0次、1次或多次;
  • 正则{n}:表示此正则正好出现n次;
  • 正则{n,}:表示此正则出现n次以上(包含n次);
  • 正则{n,m}:表示此正则出现n~m次;

6.逻辑运算

  • 正则1正则2:正则1判断完成后继续判断正则2;
  • 正则1|正则2:正则1或是正则2有一组满足即可;
  • (正则):将多个正则作为一组,可以为这一组单独设置出现的次数。

Pattern类常用方法

No. 方法名称 类型 描述
1 public static Pattern compile(String regex) 普通 编译正则表达式
2 public String[] split(CharSequence input) 普通 数据全拆分操作
3 public String[] split(CharSequence input,int limit) 普通 数据部分拆分操作
4 public Matcher matcher(CharSequence input) 普通 取得Matcher类对象

注意:Pattern类没有定义构造方法,所以想要取得Pattern类对象,必须利用compile()方法进行正则表达式的编译操作。同时,因为在Pattern类中定义的方法,在进行参数接收时接收的都是CharSequence接口对象,所以只要是CharSequence接口的子类都可以进行正则操作。

例:利用Pattern类实现字符串拆分

package Project.Study.PatternClass;import java.util.Arrays;
import java.util.regex.Pattern;public class Test1 {public static void main(String[]args){String str="hello3232world32!!!";String regex="\\d+";Pattern pattern=Pattern.compile(regex);       //编译正则String[] result =pattern.split(str);     //拆分字符串System.out.println(Arrays.toString(result));}
}
//结果:
//[hello, world, !!!]

Matcher类常用方法

No. 方法名称 类型 描述
1 public boolean matches() 普通 正则匹配
2 public String replaceAll(String replacement) 普通 全部替换
3 public String replaceFirst(String replacement) 普通 替换首个

例:实现字符串验证操作

package Project.Study.MatcherClass;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test1 {public static void main(String[]args){String str="100";String regex="\\d+";Pattern pattern=Pattern.compile(regex);   //编译正则Matcher matcher=pattern.matcher(str);    //进行正则匹配System.out.println(matcher.matches());  //匹配结果}
}
//结果:
//true

String类对正则的支持

事实上,在实际开发中String类使用得较多,大部分情况下都会使用String类中提供的方法来直接简化正则操作,只有很少的情况下才会使用Pattern类和Matcher类操作正则。

String类与正则有关的5个操作方法

No. 方法名称 类型 描述
1 public boolean matches(String regex) 普通 正则验证,使用指定的字符串判断其是否符合给出的正则表达式结构
2 public String replaceAll(String regex,String replacement) 普通 将满足正则标记的内容全部替换为新的内容
3 public String replaceFirst(String regex,String replacement) 普通 将满足正则标记的首个内容替换为新的内容
4 public String[] split(String regex) 普通 按照指定的正则标记进行字符串的全拆分
5 public String[] split(String regex,int limit) 普通 按照指定的正则标记进行字符串的部分拆分

上面5个方法包括字符串的替换、拆分、验证操作,下面我们就来实现一下

例:实现字符串的替换

package Project.Study.Regex;public class Test1 {public static void main(String[]args){String str="hel12l32o232121wQo@#rl32d!!!";//给出一组混乱的字符串String regex="[^a-z]";        //编写正则,剔除所有不是小写字母的字符System.out.println(str.replaceAll(regex,""));//字符串替换}
}
//结果:
//helloworld

例:字符串的拆分

package Project.Study.Regex;public class Test2 {public static void main(String[]args){String str="hello090world3241!!!";String regex="\\d+";  //表示"[0-9]"一位以上的整数位,属于简化写法,因为是在字符串中定义的,所以用"\\"代替"\",属于转义字符操作String[] result =str.split(regex);for (String s : result) {System.out.println(s);    //输出分隔好的字符串}}
}
//结果:
//hello
//world
//!!!

正则验证的应用

若是字符串是带小数点".“的数字呢(小数点”."在正则中表示任意字符),我们又应该怎么将其转换为浮点型数据?
例:将字符型数字转换为浮点型数据

package Project.Study.Regex;public class Test3 {public static void main(String[]args){String str1="10.01";String str2="10.10";String regex="\\d+(\\.\\d+)?";if(str1.matches(regex)){      //转型前要进行验证System.out.println(Double.parseDouble(str1));}if(str2.matches(regex)){        //转型前要进行验证System.out.println(Double.parseDouble(str2));}}
}
//结果:
//10.01
//10.1

上程序中的正则解析:

上程序中的"?"表示该小数位可能出现0次或1次。
上程序中使用了matches()方法进行正则验证,同理,我们也可以用它来判断其他,例如:IP地址

例:

package Project.Study.Regex;public class Test4 {public static void main(String[]args){String str1="192.168.1.1";String str2="192.1683.1.1";String regex1="\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";//该正则中的"\\d{1,3}"表示1~3位数字String regex2="(\\d{1,3}\\.){3}\\d{1,3}";        //简化正则操作System.out.println(str1.matches(regex1));System.out.println(str1.matches(regex2));System.out.println(str2.matches(regex1));System.out.println(str2.matches(regex2));}
}//结果:
//true
//true
//false
//false

例:判断日期格式是否正确

package Project.Study.Regex;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test5 {public static void main(String[]args) throws ParseException {String str="2013-8-15";String regex="\\d{4}-\\d{1,2}-\\d{1,2}";    //定义验证正则if(str.matches(regex)){                     //符合规则Date date=new SimpleDateFormat("yyyy-MM-dd").parse(str);System.out.println(date);}}
}
//结果:
//Thu Aug 15 00:00:00 CST 2013

Java学习总结:38(正则表达式)相关推荐

  1. java学习(38):数组排序(直接排序)

    /5 有一个长度为10的int类型数组,存储了10个年龄数据,利用Eclipse工具设计一个java控制台程序, 完成将这个int类型数组中年龄进行算法对比,将10个年龄重新存储在新数组中,新数组中存 ...

  2. 【java学习之路】(javaWeb篇)007.正则表达式专题

    正则表达式 1. 学习目标 掌握正则表达式的作用 掌握正则表达式的语法 了解常见的正则表达式 2. 内容讲解 2.1 正则表达式的概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特 ...

  3. Java学习-17 正则表达式简述

    Java学习-17 正则表达式 1.什么是正则表达式? 正则表达式是构成搜索模式(search pattern)的字符序列. 当您搜索文本中的数据时,您可使用搜索模式来描述您搜索的内容. 正则表达式可 ...

  4. 史上最全的Java学习路线

    java基础 一.Java的历史和三大版本 1. Java的发展史 2. Java语言能做什么 二.Java的开发环境 1. 配置开发环境 三.Java的第一个程序及运行原理 JVM 的组成部分 写第 ...

  5. JAVA编写的基于正则表达式的SNL词法分析器

    JAVA编写的基于正则表达式的SNL词法分析器 主要思想是利用正则表达式将SNL代码依次分辨提取为TOKEN序列 我先把我使用的例子举出来 program p type t1 = integer; v ...

  6. Java 过滤特殊字符的 正则表达式

    Java正则表达式学习: 因为正则表达式是一个很庞杂的体系,此例仅举些入门的概念,更多的请参阅相关书籍及自行摸索. \\ 反斜杠 \t 间隔 ('\u0009') \n 换行 ('\u000A') \ ...

  7. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

  8. Java过滤特殊字符的正则表达式

    在网上找了好久也没找到个合适的正则表达式以过滤特殊字符:自己学习了下,写了两个,实现要求. Java代码   // 过滤特殊字符 public   static   String StringFilt ...

  9. java中递归的概念_【Java】基础38:什么叫递归?

    今天是我自学Java的第38天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 递归:不要看这个名字好像挺高大上的样子,其实理解起来还是蛮容易的. 在学习递归之前,我们先学习下目录的遍历,递归的 ...

  10. javame学习_从零基础自学Java教程:648集全网最新Java学习教程,一学就会

    我们都知道Java的功能非常的强大,Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即J ...

最新文章

  1. 大话中文文本分类之textCNN
  2. Windows XP Mode for Windows 7
  3. Activity学习(一):生命周期
  4. 408. Valid Word Abbreviation有效的单词缩写
  5. c语言整数检验,C程序整数缺陷的检测与修复
  6. TensorFlow8-mnist手写数字识别入门
  7. arm linux远程桌面win7卡顿,主编解答win7系统使用远程桌面出现卡顿的恢复方法
  8. php 白名单,php实现ip白名单黑名单功能
  9. 6.go import
  10. 超大图像的二值化方法
  11. 微信小程序登录 php后台
  12. 【智能制造】36页精彩PPT:探讨智能制造的三驾马车
  13. 挑食有理——罗敏娜集团总裁卓顺发养生之道
  14. MySQL安装教程包含所有平台(图解),MySQL下载步骤详解(带安装教程)
  15. sqlserver2012(and mysql)数据库简单内外连接-双表-三(多)表查询
  16. 机器人与视觉,基于TCP(工具坐标)偏移
  17. uni-app 161朋友圈查看权限
  18. 研究下php加密混淆,解析php混淆加密解密的手段,如 phpjm,phpdp神盾
  19. Hexo系列(2) - NexT主题美化与博客功能增强
  20. HTML5期末大作业:基于html企业官网项目的设计与实现【艺术官网】

热门文章

  1. 插入网络CSS矢量图标、网络SVG矢量图标
  2. 在CentOS 6.6 x86_64上安装SystemTap/Perf+FlameGraph玩转火焰图实录
  3. 帕斯卡三角形(Pascal's triangle)
  4. 扩展jquery实现客户端表格的分页、排序
  5. 递归和循环:跳台阶和变态跳台阶和矩形覆盖
  6. oneinstack
  7. scp遇到路径中有空格
  8. yii2框架随笔29
  9. android笔记1——开发环境的搭建
  10. C# async await 学习笔记2