第10 章 : 正则表达式

38 认识正则表达式

JDK >= 1.4
使用正则方便进行数据验证处理,复杂字符串修改

实现字符串转数字


class Demo {public static boolean isNumber(String temp){char[] chars = temp.toCharArray();for(char c : chars){if(c > '9' || c < '0'){return false;}}return true;}public static void main(String[] args) {String number = "123";if(isNumber(number)){int i  = Integer.parseInt(number);System.out.println(i);// 123}}
}

使用正则表达式

String number = "123";
if(number.matches("\\d+")){int i  = Integer.parseInt(number);System.out.println(i);// 123
}

39 常用正则标记

1、字符匹配

x   任意字符
\\  \
\n  换行
\t  制表符

2、字符集

[abc] 任意一个
[^abc]  不在其中任意一个
[a-zA-Z] 任意字母
[0-9] 一个数字

3、简化字符集

. 任意一个字符
\d 数字[0-9]
\D 等价于[^0-9]
\s 匹配任意空格,换行,制表符
\S 匹配非空格数据
\w 字母、数字、下划线等价于[a-zA-Z_0-9]
\W 非字母、数字、下划线等价于[^a-zA-Z_0-9]

4、边界匹配

^ 匹配开始
$ 匹配结束

5、数量

? 0次或1次
* 0次、1次或多次
+ 1次或多次
{n} 长度=n次
{n,} 长度>=n次
{n,m} 长度>=n and 长度<=m次

6、逻辑表达式,多个正则

XY X之后是Y
X|Y 或
() 整体描述
String str = "123";
String regex = "\\d+";
System.out.println(str.matches(regex));
// true

40 String类对正则的支持

public boolean matches(String regex)
public String replaceFirst(String regex, String replacement)
public String replaceAll(String regex, String replacement)
public String[] split(String regex)
public String[] split(String regex, int limit)

示例1:删除非字母和非数字

String str = "asfasdfw3414^&*^&%^&wefwerfdc^&*&*fafdasd";
String regex = "[^a-zA-Z0-9]+";
System.out.println(str.replaceAll(regex, ""));
// asfasdfw3414wefwerfdcfafdasd

示例2:数字分隔拆分字符串

String str = "sdasdf123123ffsadfsda232edasf";
String regex = "\\d+";
String[] list = str.split(regex);
for(String s : list){System.out.println(s);
}
/*** sdasdf* ffsadfsda* edasf*/

示例3:判断字符串是否为数字

String str = "10.1";
String regex = "\\d+(\\.\\d+)?";if(str.matches(regex)){System.out.println(Double.parseDouble(str));// 10.1
}

示例4:判断字符串是否为日期

import java.text.ParseException;
import java.text.SimpleDateFormat;class Demo {public static void main(String[] args) throws ParseException {String str = "2019-11-17";String regex = "\\d{4}-\\d{2}-\\d{2}";if (str.matches(regex)) {System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));// Sun Nov 17 00:00:00 CST 2019}}
}

示例5:判断电话号码
电话号码

51283346      \\d{7,8}
010-51283346  (\\d{3}-)?
(010)51283346 (\(\\d{3}\))?

class Demo {public static void main(String[] args) {String[] numbers = new String[]{"51283346","010-51283346","(010)51283346"};String regex = "((\\d{3}-)|(\\(\\d{3}\\)))?\\d{7,8}";for(String number : numbers){System.out.println(number.matches(regex));}/*** true* true* true*/}
}

示例6:邮箱验证
用户名:数字、字母、下划线(不能开头)
域名:数字、字母、下划线
域名后缀:com、cn、net、com.cn、org

String email = "google@qq.com";
String regex = "[0-9a-zA-Z]\\w+@\\w+\\.(com|cn|net|com.cn|org)";
System.out.println(email.matches(regex));
// true

41 java.util.regex包支持

Pattern 正则表达式编译

private Pattern(String p, int f)
public static Pattern compile(String regex)

Mather 正则匹配

public Matcher matcher(CharSequence input)
public boolean matches()

Pattern示例

import java.text.ParseException;
import java.util.regex.Pattern;class Demo {public static void main(String[] args) throws ParseException {String email = "ooxx12ooxx000ooxx";Pattern pattern = Pattern.compile("\\d+");String[] list = pattern.split(email);for (String s : list) {System.out.println(s);}/*** ooxx* ooxx* ooxx*/}
}

Matcher示例

import java.text.ParseException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;class Demo {public static void main(String[] args) throws ParseException {String number = "6687";Pattern pattern = Pattern.compile("\\d+");Matcher matcher = pattern.matcher(number);System.out.println(matcher.matches());// true}
}

拆分,替换,匹配使用String类就可以实现

String不具备的功能:

示例:提取sql中的变量名

import java.text.ParseException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;class Demo {public static void main(String[] args) throws ParseException {String sql = "insert into student(name, age) values(#{name}, #{value})";Pattern pattern = Pattern.compile("#\\{\\w+\\}");Matcher matcher = pattern.matcher(sql);while (matcher.find()){System.out.println(matcher.group(0).replaceAll("#|\\{|\\}", ""));}/*** name* value*/}
}

Java学习路线-20:正则表达式相关推荐

  1. 十年架构师留下最完整的Java学习路线

    原文地址:https://club.dingding.xin/topic/5081/十年架构师留下最完整的java学习路线?code=cb850abbce523c7f886f583d6dc00f5e ...

  2. 十年架构师留下最完整的Java学习路线,学完年薪40W

    文章有点长,请大家耐心看完,话不多说直接上干货! 永不过时的编程语言--Java 编程开发. Java编程语言占比: 据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以900万的程序员数 ...

  3. Java学习星球,Java学习路线

    目录 一.Java学习路线 二.学习计划 三.为何会有Java学习星球? 四.加入星球后,你可以得到什么? 五.如何加入Java学习星球? 六.打卡挑战 大家好,我是哪吒,一个靠着热情攀登至C站巅峰的 ...

  4. 阿里云Java学习路线 - Java编程入门 笔记

    学习链接 目录 学习链接 第一章 Java语言介绍 1.Java发展简介 2.Java语言特点 3.Java可移植性 第二章 搭建Java开发环境 1.JDK简介 2.安装完成后配置JDK环境 第三章 ...

  5. 【最新版】Java学习路线(含B站口碑推荐视频链接)

    文章目录 关于如何自学 一.计算机网络 二.数据结构与算法 三.操作系统 四.计算机组成原理 五.编译原理 六.设计模式 七.MySQL 八.实操工具 九.JAVA并发与JVM 十.Redis 十一. ...

  6. 从入门到精通,Java学习路线导航(附学习资料+持续更新)

    引言 最近也有很多人来向我"请教",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧. J ...

  7. Java学习路线从入门到入土

    Java学习路线从入门到入土 Java学习路线从入门到入土 Java学习路线从入门到入土 简介 Java基础课程 第一阶段 第一部分:Java开发介绍 第二部分:Java数组 第三部分:Java面向对 ...

  8. 从小白到大神Java学习路线

    Java学习路线 第一阶段:JavaSE 1. 第一部分:Java开发介绍 DOS常用命令 JVM.JRE.JDK之间的关系 Java开发环境的搭建:安装JDK,配置环境变量 Java入门程序(Jav ...

  9. 第1讲 Java学习路线怎么学习Java

    第1讲 Java学习路线&怎么学习Java 1        概述 学过一段时间的同学一定会觉得Java学习最头疼的不是语法结构的繁杂,而是Java本身体系结构的庞大.以至于自己不知道接下去该 ...

  10. java学习路线,一个初中生学java要多久,java难学吗

    一门永不过时的编程语言--Java 软件开发 java难学吗 java不难,你可以做如下学习 一.到相应的培训机构付费学习 别在这说培训机构没用什么的,不过一定要找正规的培训机构,不然容易被坑.培训机 ...

最新文章

  1. pytorch保存模型pth_Day159:模型的保存与加载
  2. zookeeper单节点部署
  3. 反编译Android APK详细操作指南
  4. Python一亿以内的素数个数_Python 计数质数
  5. 版权所有LIKEWING_柳我借地存个图学习一下
  6. Ogre1.7的地形、天空与雾
  7. fiddler限制网速
  8. 常见电容器图片_工业机器视觉的常见应用与施努卡VisionMax视觉系统介绍
  9. (5)Redis主从同步原理及详细配置
  10. Visual Studio 2005超级集成版本下载
  11. nginx源码编译安装和配置
  12. access日期如何增加年数_ACCESS 时间日期操作大全
  13. Tomcat安装及环境配置教程
  14. SQL 修改表的常用命令
  15. RabbitMQ:消息模型
  16. [XJTU计算机网络安全与管理]——第十三讲 攻击与病毒
  17. FPGA中的LUT LUTRAM BRAM DSP FF
  18. 1 大奇迹 - 遥感 - 改变世界的技术
  19. 【IT运维小知识】安全组是什么意思?
  20. springboot整合redis之用户手机验证码注册登录

热门文章

  1. chrome+链接android手机,为什么android手机限制chrome浏览器数据连接还可以上网
  2. cisco ASA 防火墙安全算法原理和基本配置(转自http://xiaoxiao1001.blog.51cto.com/7640562/1300161)
  3. 内功修炼之lodash——chunk、zip、groupBy、invokeMap方法
  4. Zencart模板结构和设计详解
  5. Mac工具 shimo 无法正常使用(macOS 系统版本问题)
  6. 【Java从零到架构师第③季】【项目实战】驾考管理系统
  7. 50多款Android运用法式遭Rootkit病毒侵扰进犯
  8. C#Form窗体模仿PhotoShop软件,高仿真原PS界面,实现PS对图片基本操作、拍照等,计算机图形学相关
  9. 计算机的垃圾站是在硬盘,电脑垃圾回收站在哪里
  10. TypeScript——理解 infer 关键字!