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相关推荐

  1. R语言ggplot2可视化、不同分组使用不同的色彩、同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type)

    R语言ggplot2可视化.不同分组使用不同的色彩.同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type) 目录

  2. mysql分组取日期最大的记录_mysql 分组 group by, 排序 取每条记录中,时间最大

    mysql教程 分组 group by, 排序 取每条记录中,时间最大的一条记录 select a.* from test a, (select aid, max(day) max_day from ...

  3. groupby多个字段性能_MySQL今天我们说下分组(group by)

    MySQL的分组(group by), 根据一个或多个列对结果集进行分组.在分组列上,可以使用 count,avg,sum等函数. 对应的语法为: SELECT column_name, functi ...

  4. 核心概念——节点分组 Group

    title: 节点分组 Group order: 9 New Feature:自 G6 3.1.2 开始支持自定义节点分组的标题了,可以渲染带有标题的分组. 对于熟悉图可视化类库的用户来说,节点分组可 ...

  5. 高级指引——手动创建节点分组 Group

    title: 手动创建节点分组 Group order: 8 节点分组在默认情况下是根据数据自动渲染的,当数据中存在 groups 时根据 groups 字段渲染分组,当不存在 groups 时,则根 ...

  6. SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  7. 【SQL】分组数据,过滤分组-group by , having

    学习笔记,原文来自http://blog.csdn.net/robinjwong/article/details/24845125 创建分组 - GROUP BY 分组是在SELECT语句的GROUP ...

  8. Nacos 配置分组 Group,命名空间Namespace和配置集DataId

    配置集( Data ID) 一组相关或者不相关的配置项的集合称为配置集.在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置.例如,一个配置集可能包含了数据源.线程池.日志级别等配置项. ...

  9. Keil 工程管理中移动分组(group)的位置

    当工程比较大时,我们会在工程管理中新建很多分组(group),在新建分组的时候可能会没太考虑分组的排序位置,后续想要移动分组怎么办呢?我们会发现直接鼠标左键长按移动是移动不了的,此时可以在任意分组或工 ...

  10. java正则 group_Java正则表达式,分组 group()、groupCount()

    示例: import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...

最新文章

  1. Android笔记之ViewPager实现滑动页面
  2. C语言函数sscanf()的用法
  3. Java方法中的参数太多,第6部分:方法返回
  4. 服务:OracleDBConsoleorcl [Agent process exited abnormally during initialization]
  5. HashSet、LinkedHashSet、TreeSet 简明解释
  6. ppt课堂流程图_4个超实用的PPT制作技巧:开学提升备课质量,资深老师都在用
  7. php下载css图片,PHP实现下载CSS文件中的图片
  8. .NET进销存系统开发笔记------之Gridview应用
  9. GoLand 连接远程代码库
  10. 鲁班H5页面生成工具源码
  11. 金融学习之十一——久期
  12. 爬取初试----猫眼电影,猫眼评分
  13. 帆软 文件控件图标更换_【产品对比】赢在自我的战场:TABLEAU VS. 帆软 (1)
  14. 将爬取的实习僧网站数据传入HDFS
  15. 什么是工业AGV导航读码器?用在什么地方?
  16. 关于汇编语言中的立即寻址和直接寻址
  17. Redis之懒惰删除
  18. 故事,零落,,,,,
  19. PAT刷题集(乙级)1003 我要通过!(20 分)
  20. Java基础/进阶/电商系统实战系列文章汇总

热门文章

  1. python爬虫登录正方教务管理系统获取成绩数据_「武汉理工大学教务处管理系统」Python爬虫初学(4)登陆武汉理工大学教务处并转到成绩管理 - seo实验室...
  2. laravel mews/captcha包安装图形验证后 提示验证码错误
  3. java更改图片小于32kb_echarts上传图表图片到Java 后台保存出来是空白图片?
  4. 后台管理系统——02首页布局
  5. python3.7怎么设置字体大小,python字体大小如何设置
  6. 有些歌,放在这慢慢听
  7. 主观能动性存在的一个理论根据
  8. 【算法】1436. 旅行终点站(多语言实现)
  9. python完全平方数_python判断完全平方数的方法
  10. python 密码生成器