一、正则标记

​ 所有的正则可以使用的标记都在 java.util.regex.Pattern 类里定义。

1.1 单个字符

  • 字符:表示由一位字符所组成;
  • \\\\:表示转义字符"\\";
  • \\t:表示一个“\\t”字符;
  • \\n:匹配换行“\\n”符号;

1.2 字符集

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

1.3 简化的(预定义的)字符集表达式

  • .:匹配除了换行符“\\n”以外的任意一个字符;
  • \\d:等价于[0-9],属于简化写法;
  • \\w:等价于[a-zA-Z_0-9],表示由任意的字母、数字 和 _ 所组成;
  • \\s:表示任意的空白字符,例如:"\\t","\\n";
  • \\D:等价于【^0-9】非数字字符,属于简化写法;
  • \\W:等价于【^a-zA-Z_0-9],表示不是由任意的字母、数字 和 _ 所组成;
  • \\S:表示任意的非空白字符;

1.4 边界匹配

不要在 Java 中使用(java 不支持),在 JavaScript 使用。

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

1.5 数量表达

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

1.6 逻辑运算

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

二、String 类对正则的支持

​ 在 JDK 1.4之后,由于正则的引入,所以 String 类里也相应的增加了新的操作方法支持。

以下 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) | 根据regex,将剩余的全部拆分 | | 5 | public String[] split(String regex, int limit) | 根据regex,将剩余的部分拆分 |

给出的几个方法里,替换和拆分实际难度不高,最关键的就是正则匹配,在验证上使用的特别多。

范例1:字符串替换

只保留 "wodhaghlgjl79837()@#\$%^&aRFGGH"字符串中的小写字母,并输出。

public class TestDemo {
public static void main(String args[]){
String str = "wodhaghlgjl79837()@#\$%^&aRFGGH";
String regex = "[^a-z]";
String str1 = str.replaceAll(regex,"");
System.out.println(str1);
}
}

范例2:字符串拆分

将以下字符串按照数字拆分 "wodhaghlgjl79837()@#\$%^&aRFG435GH",并输出。

public class TestDemo {
public static void main(String args[]){
String str = "wodhaghlgjl79837()@#\$%^&a87RFG435GH";
String regex = "\\\\d+";
String data[] = str.split(regex);
for (int i=0;i<data.length; i++){
System.out.println(data[i]);
}
}
}

范例3:验证

验证一个字符串是否是数字,如果是则将其变成 double 型。

数字可能是整数也可能是小数。

public class TestDemo {
public static void main(String args[]){
String str = "10.34";
String regex = "\\\\d+((.\\\\d+)?)";
if (str.matches(regex)){
System.out.println(Double.parseDouble(str));
}
}
}

范例4:判断给定的字符串是否是一个IP地址(IPV4)

IP 地址: 192.168.1.1

public class TestDemo {
public static void main(String args[]){
String str = "192.187.2.42";
String regex = "\\\\d{1,3}(\\\\.\\\\d{1,3}){3}";
System.out.println(str.matches(regex));
}
}

范例5:判断是否是日期格式

给定一个字符串,要求判断其是否是日期格式,如果是则将其转换为 Date 格式

public class TestDemo {
public static void main(String args[]) throws ParseException {
String str = "2017-1-23";
String regex = "\\\\d{4}(-\\\\d{1,2}){2}";
if (str.matches(regex)){
Date date = new SimpleDateFormat("yyyy-mm-dd").parse(str);
System.out.println(date);
}
}
}

范例六:判断电话号码

一般要编写电话号码,以下几种格式都是满足的:

  • 格式一:51283346(电话号码一般长度是 7 ~ 8 位);
  • 格式二:010-51283346(区号一般长度是 3 ~ 4 位);
  • 格式三:(010)-51283346
public class TestDemo {
public static void main(String args[]){
//- 格式一:51283346
//- 格式二:010-51283346
//- 格式三:(010)-51283346
String str = "(010)-51283346";
String regex = "((\\\\d{3,4}-)?|(\\\\(\\\\d{3,4}\\\\)-)?)\\\\d{7,8}";
System.out.println(str.matches(regex));
}
}

范例七:验证 email 地址

格式要求:email 由字母、数字和 _ 组成,其中开头必须是字母,结尾可以是字母或数字,用户名长度不超过30,最后的根域名只能是.com、.cn、.net、.com.cn、.net.cn、.edu、.gov、.org。

public class TestDemo {
public static void main(String args[]){
String str = "hdasf101234jk868954@qq.com.cn";
String regex = "[a-zA-Z]\\\\w{0,28}[a-zA-Z0-9]@\\\\w+\\\\.(com|cn|net|com\\\\.cn|net\\\\.cn|gov|org|edu)";
System.out.println(str.matches(regex));
}
}

三、java.util.regex 包支持

​ 在大多数情况下使用正则的时候都会采用 String 类完成,但是正则最原始的开发包是 java.util.regex,这个包里面也提供有两个类。

范例:Pattern 类

public class TestDemo {
public static void main(String args[]){
String str = "hdasf101234jk868954@qq.com.cn";
String regex = "\\\\d+";
Pattern pattern = Pattern.compile(regex); // 编译正则
String data[] = pattern.split(str); // 拆分字符串
for (int i=0; i<data.length; i++){
System.out.println(data[i]);
}
}
}

​ 正是因为 String 类本身就已经支持这样的操作了,所以对于 String 类而言很少会用 Pattern 与 Matcher 这两个类进行操作了。

【7】java之正则表达式的更多相关文章

  1. java中正则表达式基本用法

    正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...

  2. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  3. Java的正则表达式

    package RegexTest; /** * Created by hu on 2016/3/29. */ /* * Java的正则表达式 在正则表达式中,用\d表示一位数字,如果在其它语言中使用 ...

  4. Java与正则表达式

    Java与正则表达式 标签: Java基础 正则 正如正则的名字所显示的是描述了一个规则, 通过这个规则去匹配字符串. 学习正则就是学习正则表达式的语法规则 正则语法 普通字符 字母, 数字, 汉字, ...

  5. Java中正则表达式去除html标签

    Java中正则表达式去除html的标签,主要目的更精确的显示内容,比如前一段时间在做类似于博客中发布文章功能,当编辑器中输入内容后会将样式标签也传入后台并且保存数据库,但是在显示摘要的时候,比如显示正 ...

  6. Java面向对象 正则表达式

     Java面向对象 正则表达式 知识概要:                (1)正则表达式的特点 (2)正则表达的匹配 (3)正则表达式的切割,替换,获取 (4)正则表达式的练习 正则表达式:符合 ...

  7. Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码正则表达式

    Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正则表达式 ============================== ©Copyright 蕃薯耀 2017年11 ...

  8. JAVA中正则表达式常用的四个方法

    JAVA中正则表达式处理字符串的四个常用方法:匹配.分割.替换.截取.其跟字符串的常用函数相似,但是使用正则表达式会更简单.更加简洁.下面是具体的例子: public class TestRegex ...

  9. Java对正则表达式的支持(一)

    Java对正则表达式的支持主要体现在String.Pattern.Matcher和Scanner类. 1.Pattern.Matcher 先看一个Pattern和Matcher类使用正则表达式的例子. ...

  10. Java中用正则表达式判断日期格式是否正确

    1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...

随机推荐

  1. gitlab修改代码提交后显示中文名称

    公司要求提交的代码能显示出是哪位提交的,所以要求显示中文名称以便统计工作 修改方法: 打开CMD命令提示符输入页面,输入修改指令: git config --global user.name &quo ...

  2. 数值计算:前向和反向自动微分(Python实现)

    1 自动微分 我们在<数值分析>课程中已经学过许多经典的数值微分方法.许多经典的数值微分算法非常快,因为它们只需要计算差商.然而,他们的主要缺点在于他们是数值的,这意味着有限的算术精度和不 ...

  3. vivo 服务端监控体系建设实践

    作者:vivo 互联网服务器团队- Chen Ningning 本文根据"2022 vivo开发者大会"现场演讲内容整理而成. 经过几年的平台建设,vivo监控平台产品矩阵日趋完善 ...

  4. Python Kconfiglib初次学习

    1 参考 kconfiglib库官方介绍:kconfiglib · PyPI Kconfiglib源码:GitHub - ulfalizer/Kconfiglib: A flexible Python ...

  5. css预处理器scss/sass语法以及使用

    scss scss在css基础语法上面增加了变量 (variables).嵌套 (nested rules).混合 (mixins).导入 (inline imports) 等高级功能,使用scss可 ...

  6. 【Linux】TCS34725 颜色传感器设备驱动

    一.概述 此笔记主要是学习 Linux 中的 I2C 驱动,顺便验证一下 TCS34725 传感器的使用,主要内容还是程序记录,方便编写其他 I2C 设备驱动时做参考,所以关于 TCS34725 这里 ...

  7. LRU 缓存

    力扣题目 146. LRU 缓存 实现 LRU 缓存需要用到哈希链表 LinkedHashMap. LinkedHashMap 是由哈希表和双链表结合而成的,它的结构如下所示. 用自带的 Linked ...

  8. Apache RocketMQ 5.0 笔记

    RocketMQ 5.0:云原生"消息.事件.流"实时数据处理平台,覆盖云边端一体化数据处理场景. 核心特性 云原生:生与云,长与云,无限弹性扩缩,K8s友好 高吞吐:万亿级吞吐保 ...

  9. MySQL 表的创建、复制、修改与删除

    MySQL中如何利用代码完成表的创建.复制.修改和删除. 一.创建表 --创建新表,如果存在则覆盖 drop table [if exists] 表名; --创建新表,如果存在则返回 create t ...

  10. flutter报错The type of the function literal can't be inferred because the literal has a block as its body.A value of type 'String?' can't be assigned to a variable of type 'String'.

    flutter有一些报错如下 The type of the function literal can't be inferred because the literal has a block as ...