IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java正则表达式 -> 正文阅读

[Java知识库]java正则表达式

java正则表达式


import java.util.regex.Matcher;
import java.util.regex.Pattern;

class test1{
		public static void main(String args[]){
				String content="";
				Strign regexp="\\d\\d\\d";
				Pattern pattern = Pattern.compile(regex);
				Matcher matcher=pattern.matcher(content);
				while(matcher.find()){
						System.out.println(matcher.group(0));
				}
		}
}

正则表达式中关于groups的说法:

在这里插入图片描述

注意事项:

  • 如果正则表达式有()即分组
  • 取出匹配的字符串规则如下
  • group(0) 表示匹配到的子字符串
  • group(1) 表示匹配到的子字符串的第一组字串
  • group(2) 表示匹配到的子字符串的第二组子串
  • 但是分组的数,不能越界

1. 正则表达式语法

1.1 转义号 \

  • 在java中两个\代表其他语言中的一个\
  • 需要用到转义符号的字符
    - * + ( ) $ \ / ? [ ] ^ { }

1.2 字符匹配符

  • [ ] : 可以接受的字符列表
  • [^ ] : 不接受的字符列表(除了列表中字符以外的任意一个字符)
  • - : 连字符 比如[A-Z] 任意单个大写字母
  • . : 匹配除了 \n以外的任意字符
  • \d : 匹配单个数字字符 相当于[0-9]
  • \D : 匹配单个非数字字符 相当于[^0-9]
  • \w : 匹配单个数字,大小写字母字符 \d{3}\w{4} 表示以三个数字字符开头的长度为7的字符串
  • \W : 相当于[^0-9a-zA-Z]
  • \s : 匹配任何空白字符
  • \S : 匹配任何非空白字符

1.3 小细节

  • 不区分大小写, (?i)abc 表示 abc不区分大小写 a((?i)b)c 表示只有b不区分大小写
  • [a-z]{6} 表示匹配连续6个都是小写字母的字符串

1.4 选择匹配符

  • | : 表示或者

1.5 正则限定符

  • * : 表示指定字符重复0或者n次 (0-n)
  • +: 指定字符重复1次或者n次 (1-n)
  • ? : 指定字符重复0次或者1次 (0 | 1)
  • {n} : 只能输入n个字符 (n)
  • {n,} : 指定至少n个匹配
  • {n,m}: 指定至少n个,但是不多于m个匹配

1.6 正则定位符

  • ^ : 指定起始字符
    • ^//d+[a-z]* 以1-n个数字开头,后面跟0-n个小写字母
  • $ : 指定结尾字符
  • \b 匹配目标字符串的边界(最后或者是空格的子字符串后面)
    • han\b
  • \B 匹配目标字符串的非边界 (与\b正好相反)
    • han\B

1.7 有关匹配的分组

在这里插入图片描述

1.8 非捕获分组

String regexp="56(?:8|89)"
//只返回  568    5689
"56(?=8|89)"
//只返回 后面跟9或者跟89的 56
"56(?!8|89)"
//只返回后面不跟 8或者 89 的  56

2. 正则表达式中的一些潜规则

2.1 贪心与非贪心

  • 所谓贪心: 即有多个匹配条件的时候,匹配字符串更长的字符串 (正则表达式的默认)
  • 非贪心: ? 加在 限定符后面,表示非贪心,尽量匹配字符串更短的

2.2 关于Pattern类

Pattern的matches 是进行整体匹配的, 一旦不整体匹配则返回false

System.out.println(Pattern.matches(reg.Str,content));

2.3 关于Matcher类

整体匹配:

matcher.matches()

关于replace(返回替换后的字符串)

String newContent=matchaer.replaceAll(”要替换的字符”);

2.4 关于反向引用(******)(算法杀器)

圆括号的内容被捕获之后,可以在这个括号后被使用,从而写出一个比较实用的匹配模式,这个被我们称为反向引用

  • 内部反向引用为: \分组号
  • 外部反向引用: $分组号

3. 正则表达式实际应用

  • 验证是否是汉字 “^ [\u0391-\uffe5]$”

  • 验证邮政编码(1-9开头的6位数) “^ [1-9]\d{5}$”

  • 验证是否是QQ号(1-9开头的 (5位数-10位数)): “^ [1-9]\d{4,9}$”

  • 验证是否是手机号码(必须是13,14,15,18开头的11位数字):

    • “^1(?:3|4|5|8)\d{9}$”
  • 验证电子邮件是否合法

    • 只能有一个@
    • @前面是用户名,可以是a-zA-Z0-9_-字符
    • @后面是域名,只能应为 sodu.com
    • 写出对应的正则表达式
      • “^[\w_-]+@[a-zA-Z]+(\.[a-zA-Z]+)*$”
  • 验证一个数是不是整数或者小数

    public class test04 {
        public static void main(String[] args) {
            String content="-345.151";
            String regex1="^[+-]?[1-9]\\d*$";  //考虑整数情况
            String regex2="^[+-]?\\d+\\.\\d+";   //考虑小数情况
            //两个合起来
            String regex3="^[+-]?([1-9]\\d*|0)(\\.\\d+)?$";
            if(Pattern.compile(regex1).matcher(content).find()) System.out.println("是整数");
            if(Pattern.compile(regex2).matcher(content).find()) System.out.println("是小数");
            if(Pattern.compile(regex3).matcher(content).find()) System.out.println("是整数或者小数");
        }
    }
    
  • 对一个url进行解析

    • 要求得到的协议
    • 要求得到的域名
    • 要求得到的端口
    • 要求得到的文件名
    public class test05 {
        public static void main(String[] args) {
            String content="https://www.baidu.com:8080/abc/index.html";
            String protocol="^([a-zA-Z]+)://";
            String domain="://([a-zA-Z.]+):";
            String port=":(\\d+)/";
            String file="/([a-zA-Z]+\\.[a-zA-Z]+)$";
    
            Pattern pattern=Pattern.compile(protocol);
            Matcher matcher=pattern.matcher(content);
            while(matcher.find()){
                System.out.println("协议名字为:"+matcher.group(1));
            }
            pattern=Pattern.compile(domain);
            matcher=pattern.matcher(content);
            while(matcher.find()){
                System.out.println("域名名字为:"+matcher.group(1));
            }
            pattern=Pattern.compile(port);
            matcher=pattern.matcher(content);
            while(matcher.find()){
                System.out.println("端口名字为:"+matcher.group(1));
            }
            pattern=Pattern.compile(file);
            matcher=pattern.matcher(content);
            while(matcher.find()){
                System.out.println("文件名字为:"+matcher.group(1));
            }
    
        }
    }
    

3.1正则支持字符串替换

String.replaceAll(regex,NEWsTRING)

3.2正则支持字符串分割

content= "hello#agjniaosg jack!asjfiaso~agk"
String[] split=content.split("#|!| |~|\\d+")
for(String ss:split){
		System.out.println(ss)
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:18:07  更:2022-03-12 17:20:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:25:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码