Regex 量词Quantifier 分组group
1.量词Quantifier
a.作用:限定之前的字符出现的次数
b.形式:
1.*:之前的字符可以出现0次到无穷多次。
2.+:之前的字符至少需要出现1次。
3.?:之前的字符至多只能出现1次。
2.区间量词
a.作用:具体规定字符的出现次数
b.形式:
1.{min,max}
2.{min, }
3.{number}
4.*={0,}
5.+={1,}
6.?={0,1}
7.用\\d+验证数字字符串。
3.量词的局限
a.量词只能规定之前字符或字符组的出现次数
b.如果要规定一个字符串的出现次数,必须使用括号(...),在括号内填写字符串,在闭括号之后添加量词。
4.括号的用途:多选结构
a.字符组(这就是字符组[1234567890])只能表示某个位置可能出现的单个字符,而不能表示某个位置可能出现的字符串。
b.作用:表示某个位置可能出现的字符串
c.形式:
1.(...|...),在竖线两端添加各个字符串
2.(...|...|...|...)
5.括号的用途:捕获分组
a.作用:将括号内的子表达式捕获的字符串存放到匹配结果中,供匹配完成后访问
b.形式:使用普通的括号(...)
/*** 括号的用途:捕获分组* */
public class CaptureBasic {public static void main(String[] args) {String email = "webmaster@itcast.net";String regex = "(\\w+)@([\\w.]+)";//String regex = "(\\w+)@([\\w]+.[\\w]+)";//比较一下这种情况Pattern p = Pattern.compile(regex);Matcher m = p.matcher(email);if (m.find()) {//组零表示整个模式,因此表达式 m.group(0) 等效于 m.group()。 System.out.println("email add is:\t" + m.group(0));System.out.println("username is:\t" + m.group(1));System.out.println("hostname is:\t" + m.group(2));//System.out.println("exception is:\t" + m.group(3));}}}
6.捕获分组的注意事项
a.只要使用了括号,就存在捕获分组
b.捕获分组按照开括号出现的从左至右的顺序编号,遇到括号嵌套的情况也是如此。
c.如果捕获分组之后存在量词,则匹配结果中,捕获分组保存的是子表达式最后一次匹配的字符串。------注意掌握!
/*** 组的使用......掌握!!!* */
public class CaptureMind {public static void main(String[] args) {explainGroupNo();System.out.println("");explainGroupQuantifier(); }/*** 第一个左括号是第一组...依此类推。* */public static void explainGroupNo() {String email = "webmaster@itcast.net";String regex = "((\\w+)@([\\w.]+))";Pattern p = Pattern.compile(regex);Matcher m = p.matcher(email);if (m.find()) {System.out.println("match result:\t" + m.group(0));System.out.println("group No.1 is:\t" + m.group(1));System.out.println("group No.2 is:\t" + m.group(2));System.out.println("group No.3 is:\t" + m.group(3));}}/*** 与上面方法中正则表达式的区别<br>* 如果捕获分组之后存在量词,则匹配结果中,捕获分组保存的是子表达式最后一次匹配的字符串。------注意掌握!* */public static void explainGroupQuantifier() {String email = "webmaster@itcast.net";String regex = "(\\w)+@([\\w.])+";Pattern p = Pattern.compile(regex);Matcher m = p.matcher(email);if (m.find()) {System.out.println("match result:\t" + m.group(0));System.out.println("group No.1 is:\t" + m.group(1));System.out.println("group No.2 is:\t" + m.group(2));}}}
7.不捕获文本的括号
a.如果正则表达式很复杂,或者需要处理的文本很长,捕获分组会降低效率。
b.作用:仅仅用来对表达式分组,而不把分组捕获的文本存入结果。
c.形式:(?:...)
/*** 不捕获文本的括号,形式:(?:...)------掌握!!!* */
public class NoCaptureParenthese {public static void main(String[] args) {String email = "webmaster@itcast.net";String regex = "(?:webmaster|admin)@(itcast.net)";Pattern p = Pattern.compile(regex);Matcher m = p.matcher(email);if (m.find()) {System.out.println("match result:\t" + m.group(0));System.out.println("group No.1 is:\t" + m.group(1));}}
}
8.括号的用途:反向引用
a.作用:在表达式的某一部分,动态重复之前的子表达式所匹配的文本。
b.形式:\1
/***括号的用途:反向引用*a.作用:在表达式的某一部分,动态重复之前的子表达式所匹配的文本。*b.形式:\1 * */
public class BackReferenceBasic {public static void main(String[] args) {String[] strings = new String[] { "<h1>good</h1>", "<h1>bad</h2>"};String regex = "<(\\w+)>[^<]+</(\\1)>";//掌握!!!for (String str : strings) {if (str.matches(regex)) {System.out.println("\"" + str+ "\" can be matched with regex \"" + regex+ "\"");} else {System.out.println("\"" + str+ "\" can not be matched with regex \"" + regex+ "\"");}}}}
研究下面一个问题:
public class BackReferenceReplace {public static void main(String[] args) {String dupWords = "word word";String dupWordRegex = "(\\w+)\\s+(\\1)";//以下两行是扩充的代码//String dupWords = "word word word word";//String dupWordRegex = "(\\w+)(\\s+(\\1))+";System.out.println("Before replace:\t" + dupWords);//根据java语句的规范,"$1"表示的是正则表达式中编号为1的分组所捕获的字符串......理解!!!System.out.println("After replace:\t"+ dupWords.replaceAll(dupWordRegex, "$1"));}}
获取文本中所有的是数字
public static void main(String[] args) {String toStr = "";String fromStr = "商品名称";String infoStr = "商品名称:2072万金钱=50元 QQ三国问鼎(网通)三足鼎立 低价便宜";if(infoStr.contains(fromStr)){toStr = infoStr.substring(infoStr.indexOf(":")+1);}String regex = "\\d+";Pattern p = Pattern.compile(regex);Matcher m = p.matcher(toStr);while(m.find()){System.out.println(m.group());}//System.out.println(toStr);}
java使用正则表达式获取字符串中的所有英文单词或数字
package regex;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Test{ public static void main(String[] args){ String str="SUN公司被Oracle收购,是否意味着java被逼上了死路?"; String s = "\\d+.\\d+|\\w+";Pattern pattern=Pattern.compile(s); Matcher ma=pattern.matcher(str); while(ma.find()){ System.out.println(ma.group()); } } }
Regex 量词Quantifier 分组group相关推荐
- R语言ggplot2可视化、不同分组使用不同的色彩、同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type)
R语言ggplot2可视化.不同分组使用不同的色彩.同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type) 目录
- mysql分组取日期最大的记录_mysql 分组 group by, 排序 取每条记录中,时间最大
mysql教程 分组 group by, 排序 取每条记录中,时间最大的一条记录 select a.* from test a, (select aid, max(day) max_day from ...
- groupby多个字段性能_MySQL今天我们说下分组(group by)
MySQL的分组(group by), 根据一个或多个列对结果集进行分组.在分组列上,可以使用 count,avg,sum等函数. 对应的语法为: SELECT column_name, functi ...
- 核心概念——节点分组 Group
title: 节点分组 Group order: 9 New Feature:自 G6 3.1.2 开始支持自定义节点分组的标题了,可以渲染带有标题的分组. 对于熟悉图可视化类库的用户来说,节点分组可 ...
- 高级指引——手动创建节点分组 Group
title: 手动创建节点分组 Group order: 8 节点分组在默认情况下是根据数据自动渲染的,当数据中存在 groups 时根据 groups 字段渲染分组,当不存在 groups 时,则根 ...
- SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...
- 【SQL】分组数据,过滤分组-group by , having
学习笔记,原文来自http://blog.csdn.net/robinjwong/article/details/24845125 创建分组 - GROUP BY 分组是在SELECT语句的GROUP ...
- Nacos 配置分组 Group,命名空间Namespace和配置集DataId
配置集( Data ID) 一组相关或者不相关的配置项的集合称为配置集.在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置.例如,一个配置集可能包含了数据源.线程池.日志级别等配置项. ...
- Keil 工程管理中移动分组(group)的位置
当工程比较大时,我们会在工程管理中新建很多分组(group),在新建分组的时候可能会没太考虑分组的排序位置,后续想要移动分组怎么办呢?我们会发现直接鼠标左键长按移动是移动不了的,此时可以在任意分组或工 ...
- java正则 group_Java正则表达式,分组 group()、groupCount()
示例: import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...
最新文章
- Android笔记之ViewPager实现滑动页面
- C语言函数sscanf()的用法
- Java方法中的参数太多,第6部分:方法返回
- 服务:OracleDBConsoleorcl [Agent process exited abnormally during initialization]
- HashSet、LinkedHashSet、TreeSet 简明解释
- ppt课堂流程图_4个超实用的PPT制作技巧:开学提升备课质量,资深老师都在用
- php下载css图片,PHP实现下载CSS文件中的图片
- .NET进销存系统开发笔记------之Gridview应用
- GoLand 连接远程代码库
- 鲁班H5页面生成工具源码
- 金融学习之十一——久期
- 爬取初试----猫眼电影,猫眼评分
- 帆软 文件控件图标更换_【产品对比】赢在自我的战场:TABLEAU VS. 帆软 (1)
- 将爬取的实习僧网站数据传入HDFS
- 什么是工业AGV导航读码器?用在什么地方?
- 关于汇编语言中的立即寻址和直接寻址
- Redis之懒惰删除
- 故事,零落,,,,,
- PAT刷题集(乙级)1003 我要通过!(20 分)
- Java基础/进阶/电商系统实战系列文章汇总
热门文章
- python爬虫登录正方教务管理系统获取成绩数据_「武汉理工大学教务处管理系统」Python爬虫初学(4)登陆武汉理工大学教务处并转到成绩管理 - seo实验室...
- laravel mews/captcha包安装图形验证后 提示验证码错误
- java更改图片小于32kb_echarts上传图表图片到Java 后台保存出来是空白图片?
- 后台管理系统——02首页布局
- python3.7怎么设置字体大小,python字体大小如何设置
- 有些歌,放在这慢慢听
- 主观能动性存在的一个理论根据
- 【算法】1436. 旅行终点站(多语言实现)
- python完全平方数_python判断完全平方数的方法
- python 密码生成器