正则表达式02

5.4正则表达式语法02

5.4.6捕获分组

详见5.3.3

例子

package li.regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern; //演示分组
public class RegExp07 {
public static void main(String[] args) {
String content = "hanshunping s7789 nn1189han"; //下面就是非命名分组
//说明
// matcher.group(0) 是不加括号匹配到的字符串
// matcher.group(1) 是不加括号匹配到的字符串的第一个分组的内容
// matcher.group(2) 是不加括号匹配到的字符串的第二个分组的内容
//String regStr = "(\\d\\d)(\\d\\d)";//匹配4个数字的字符串 //命名分组:即可以给分组取名(名称随意)
String regStr = "(?<g1>\\d\\d)(?<g2>\\d\\d)";//匹配4个数字的字符串 Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content); while (matcher.find()) {
System.out.println("找到:" + matcher.group(0));
System.out.println("第一个分组的内容:" + matcher.group(1));
System.out.println("第一个分组的内容[通过组名]:" + matcher.group("g1"));
System.out.println("第二个分组的内容:" + matcher.group(2));
System.out.println("第二个分组的内容[通过组名]:" + matcher.group("g2"));
}
}
}

5.4.7非捕获分组

例子

给定一个字符串String content ="hello韩顺平教育 jack韩顺平老师 韩顺平同学hello";

使用非捕获分组完成,有如下要求:

  1. 找到韩顺平教育、韩顺平老师、韩顺平同学 子字符串
  2. 找到韩顺平 这个关键字,但是要求只是查找韩顺平教育韩顺平老师中包含的韩顺平
  3. 找到韩顺平这个关键字,但是要求只是查找不是(韩顺平教育和韩顺平老师)中包含有的韩顺平
package li.regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern; public class RegExp08 {
public static void main(String[] args) {
String content = "hello韩顺平教育 jack韩顺平老师 韩顺平同学hello"; // 1. 找到 韩顺平教育、韩顺平老师、韩顺平同学 子字符串
//String regStr = "韩顺平教育|韩顺平老师|韩顺平同学";
//上面的写法可以等价于非捕获分组,注意:不能matcher.group(1)
//String regStr = "韩顺平(?:教育|老师|同学)"; // 2. 找到 韩顺平 这个关键字,但是要求只是查找 韩顺平教育 和 韩顺平老师 中包含的韩顺平
//下面也是非捕获分组,也不能matcher.group(1)
//String regStr = "韩顺平(?=教育|老师)"; // 3. 找到 韩顺平 这个关键字,但是要求只是查找不是(韩顺平教育和韩顺平老师)中包含有的韩顺平
//下面也是非捕获分组,也不能matcher.group(1)
String regStr = "韩顺平(?!教育|老师)"; Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content); while (matcher.find()) {
System.out.println("找到:" + matcher.group(0));
}
}
}

5.4.8非贪婪匹配

字符 说明
? 当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。

例子

package li.regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern; public class RegExp09 {
public static void main(String[] args) {
String content = "hello111111 ok"; //String regStr = "\\d+";//默认是贪婪匹配
String regStr = "\\d+?";//非贪婪匹配 Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content); while (matcher.find()) {
System.out.println("找到:" + matcher.group(0));
}
}
}

5.5正则应用实例

  • 对字符串进行如下验证
  1. 汉字

  2. 邮政编码

    要求:是1-9开头的一个六位数,比如:123890

  3. QQ号码:

    要求:是一个1-9开头的一个(5位数-10位数),比如:12389,1345687,187698765

  4. 手机号码

    要求:必须以13,14,15,18开头的11位数,比如:13588889999

  5. URL:https://www.bilibili.com/video/BV1fh411y7R8?p=893&spm_id_from=pageDriver&vd_source=7e137c3a1559f85aacb1f151bb0a830d

例子1:

package li.regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern; //正则表达式的应用实例
public class RegExp10 {
public static void main(String[] args) {
String content = "1358888999";
//1. 汉字
//String regStr="^[\u4e00-\u9fa5]+$";//^和 $同时出现时,表示只能匹配 ^和 $之间的内容 //2. 邮政编码
//要求:是1-9开头的一个六位数,比如:123890
//String regStr="^[1-9]\\d{5}$"; //3. QQ号码:
//要求:是一个1-9开头的一个(5位数-10位数),比如:12389,1345687,187698765
//String regStr = "^[1-9]\\d{4,9}$"; //4. 手机号码
//要求:必须以13,14,15,18开头的11位数,比如:13588889999
String regStr = "^1[3458]\\d{9}$"; Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
System.out.println("满足格式");
} else {
System.out.println("不满足格式");
}
}
}

例子2:

package li.regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern; public class RegExp11 {
public static void main(String[] args) {
String content = "https://www.bilibili.com/video/BV1fh411y7R8?p=894&spm_id_from=pageDriver&vd_source=7e137c3a1559f85aacb1f151bb0a830d";
String content2 = "https://10fastfingers.com/typing-test/simplified-chinese";
String content3 = "https://zh.ua1lib.org/"; /**
* 思路:
* 1.先确定URL的开始部分 https:// 或 http://
* ((https|http)://)
* 2.接着是域名部分 www.bilibili.com
* www. 和 bilibili. 可以写成 ([\\w-]+\\.)+
* [\\w-]+ 则匹配 com
* 3.接着是域名后面
* 3.1首先是整体
* ()?表示()里面的出现零次或者一次
* 3.2然后是小括号里面
* \\/ 表示匹配 / 号
* [ ]* 表示匹配中括号里面的 0-n次
* 3.3中括号里面
* \w-?=&/:.# 表示匹配 `数字` 或 `大小写字母` 或 `下划线` 或 `-` 或 `?` 或 `=` 或 `&` 或 `/` 或 `:` 或 `.` 或 `#`
*/
String regStr="^((https|http)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/:.#]*)?$";//注意:中括号里面的字符都是它本省的含义,不用转义
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content3);
if (matcher.find()) {
System.out.println("满足格式");
} else {
System.out.println("不满足格式");
}
}
}

注意:中括号里面的字符都是它本省的含义,不用转义

day51-正则表达式02的更多相关文章

  1. ES5基础之正则表达式02:范围类、预定义类和边界字符

    1.范围类 //元字符 /* * 正则表达式由两种基本字符类型组成 * 1.原义文本字符:例如123abc * 2.元字符:元字符是在正则表达式中有特殊含义的非字母字符 */ //常见特殊符号:. * ...

  2. 匹配IP地址的正则表达式 (转)

    正则表达式 ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[ ...

  3. 第5天(半天)【shell编程初步、grep及正则表达式】

    第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...

  4. 正则表达式对IP地址的限制

    正则表达式 ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[ ...

  5. Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式

    一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...

  6. jQuery源码分析-02正则表达式-RegExp-常用正则表达式

    2.4 常用正则表达式在网上找到一篇广为流传的文章<常用正则表达式>,逐一分析,不足地方进行补充和纠正. 常用的数字正则(严格匹配) 正则 含义 ^[1-9]\d*$ 匹配正整数 ^-[1 ...

  7. python初学者日记02(正则表达式)

    写作时间:2018/12/17 作者:永远的码农(博客园) 一.正则表达式简介: 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或R ...

  8. python正则表达式与re模块-02

    正则表达式 正则表达式与python的关系 # 正则表达式不是Python独有的,它是一门独立的技术,所有的编程语言都可以使用正则 # 但要在python中使用正则表达式,就必须依赖于python内置 ...

  9. 02 - Jmeter4.x正则表达式以及跨线程使用变量

    话不多说 直接开撸 上图可以看出,有两个请求,其中第二个请求返回了登录超时,结合第一个登录接口来看,这个是需要header请求内容的也就是 token:当然设置一个token又怎么可能难得倒我们,无非 ...

随机推荐

  1. 关于奉加微PHY62xx系列如何选型?PHY6222/PHY6212/PHY6252

    PHY6252是一款支持BLE 5.2功能的系统级芯片(SOC),集成了低功耗的高性能多模射频收发机,搭载32位高性能低功耗处理器,提供64K retention SRAM.可选512/256K Fl ...

  2. Git学习与码云实战

    Git学习与码云实战 一.Git安装 概述: Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理,是目前使用范围最广的版本管理工具. 下载安装: 下载地址:http ...

  3. 业务可视化-让你的流程图"Run"起来(6.定时任务&Spring-Batch的集成)

    前言 首先,感谢大家对上一篇文章[业务可视化-让你的流程图"Run"起来(5.SpringBoot集成&微服务编排)]的支持. 分享一下近期我对这个项目的一些改进. 在项目 ...

  4. LuoguP2953 [USACO09OPEN]牛的数字游戏Cow Digit Game(博弈论)

    1~9显然,后面平\(A\)过去 #include <iostream> #include <cstdio> #include <cstring> #include ...

  5. BZOJ3037 创世纪(基环树DP)

    基环树DP,攻的当受的儿子,f表选,g表不选.并查集维护攻受关系.若有环则记录,DP受的后把它当祖宗,再DP攻的. #include <cstdio> #include <iostr ...

  6. PerfView专题 (第四篇):如何寻找 C# 中程序集泄漏

    一:背景 前两篇我们都聊到了非托管内存泄漏,一个是 HeapAlloc ,一个是 VirtualAlloc,除了这两种泄漏之外还存在其他渠道的内存泄漏,比如程序集泄漏,这一篇我们就来聊一聊. 二: 程 ...

  7. jbd2的死锁分析

    已经运行多年的jbd2,它还是死锁了 背景:这个是在centos7的环境上复现的,内核版本为3.10.0-957.27.2.el7 下面列一下我们是怎么排查并解这个问题的. 一.故障现象 oppo云内 ...

  8. [NOI2021] 密码箱 (平衡树,连分数,Stern-Brocot 树,矩阵)

    题面 记忆犹新 题解 f f f 函数值给得非常明显,一看就给人一种熟悉感--这不是连分数吗? 众所周知,连分数有个递推公式,即 p i = a i p i − 1 + p i − 2 q i = a ...

  9. 理解C++函数指针和指针函数(一)

    函数指针 实际上使用最多的还是指针函数,但我们还是可以先看看函数指针 奇怪的是,大家搜索指针函数,或者Pointer function,出来的还是函数指针的链接. OK,废话不多说,先给大家举个例子. ...

  10. uniapp+.net core 小程序获取手机号

    获取手机号 从基础库 2.21.2 开始,对获取手机号的接口进行了安全升级,以下是新版本接口使用指南.(旧版本接口目前可以继续使用,但建议开发者使用新版本接口,以增强小程序安全性) 因为需要用户主动触 ...