最近学习编译原理,要用到正则表达式。本次要学习怎样用java正则表达式。正则表达式:可以用来搜索、编辑、处理文本。

简书:

类库

介绍

是一个用正则表达式所订制的方式来对字符串进行匹配工作的泛型包。其主要包括三个类:

Pattern类(编译)

Matcher类(解释与匹配)

PatternSyntaxException类(异常)

总的流程需要是这种:首先Pattern实例定制了一个正则表达式经编译后的方式,然后一个Matcher实例在这个Pattern实例的方式下进行字符串的匹配工作。下面将逐一击破!根据实际的事例来预测吧!假设目前我有这串文字:

"我的QQ是:123456我的电话是:10010我的学号是:2016210000"

现在我想使电脑帮我提取以上的所有数字,那能怎么办?如果没学过正则表达式,提取是非常复杂的!结尾告诉你怎么做!先来学学java的正则表达式的相关变量。

1.Pattern.split(CharSequence input)用于字符串分割我想电脑自动给我借助数字分割各个别这里应该使用到正则表达式代表的含义是:匹配字符串的每个地方的所有数字首先,可以借助方法建立一个正则表达式对象,然后借助分割。

可以看出通过数字分割出三个部分(不管你是哪个数字)2.Pattern.matches(String regex,CharSequence input)用于匹配到一次即中止,如果匹配了全部字符串返回true,否则返回false

可以看出匹配完返回true,没匹配完返回false。3.Pattern.matcher(CharSequence input)Pattern只能做简单的匹配操作,要想得到更强的匹配操作,得结合matcher类

Patternp=Pattern.compile(reg);

Matcherm=p.matcher(text);

通过以上方法可以形成出matcher类4. matcher下的方式①matches()对整个字符进行匹配,只有整个匹配才返回true

Patternp=Pattern.compile("\\d+");

Matcherm=p.matcher("22bb23");

System.out.println(m.matches());

//false

Matcherm2=p.matcher("2223");

System.out.println(m2.matches());

//true

②lookingAt() 对上面的字符进行匹配,只有匹配到的字符串在上面才返回true

Patternp=Pattern.compile("\\d+");

Matcherm=p.matcher("22bb23");

System.out.println(m.lookingAt());

//true

Matcherm2=p.matcher("aa2223");

System.out.println(m2.lookingAt());

//false

③find() 对数组串匹配java 正则表达式 版本号,找到就返回true,找不到就返回false(只遍历到第一个)

Patternp=Pattern.compile("\\d+");

Matcherm=p.matcher("22bb23");

System.out.println(m.find());

//true

Matcherm2=p.matcher("aa2223");

System.out.println(m2.find());

//true

Matcherm3=p.matcher("aa2223bb");

System.out.println(m3.find());

//true

Matcherm4=p.matcher("aabb");

System.out.println(m4.find());

//false

当matches、lookingAt、find执行匹配后,就可以运用下面三种得到最具体的信息。④start()返回匹配到子字符串中的初始位置

Patternp=Pattern.compile("\\d+");

Matcherm=p.matcher("aa22bb23");

System.out.println(m.find());

//返回true

System.out.println("position:"+m.start());

//索引到的初始位置为2

⑤end()返回匹配到子字符串的最后一个位置

Patternp=Pattern.compile("\\d+");

Matcherm=p.matcher("aa22bb23");

System.out.println(m.find());

//返回true

System.out.println("position:"+m.end());

//索引到的结束位置为4

⑥group()返回匹配到的子字符串

Patternp=Pattern.compile("\\d+");

Matcherm=p.matcher("aa22bb23");

System.out.println(m.find());

//返回true

System.out.println("text:"+m.group());

//子字符串为22

注意:这些方式的调用是有先后排序!这里再介绍一个 groupCount()方法,返回表达式有多少组。不是匹配到的组,是表达式匹配的组,有多少括号就有多少组。

Patternp=Pattern.compile("([a-z]+)(\\d+)");

Matcherm=p.matcher("a2223a");

System.out.println("groupCount1:"+m.groupCount());

//返回2

Patternp2=Pattern.compile("(\\d+)");

Matcherm2=p2.matcher("a2223a");

System.out.println("groupCount2:"+m2.groupCount());

//返回1

Patternp3=Pattern.compile("(([a-z]+)(\\d+))");

Matcherm3=p3.matcher("a2223a");

System.out.println("groupCount3:"+m3.groupCount());

//返回3

其实start()、end()、group()均有重构方法start(int i),end(int i),group(int i) 专用于分组操作start(int i)

Patternp=Pattern.compile("([a-z]+)(\\d+)");

Matcherm=p.matcher("123aa2223ccc123dd");

intcount=;

while(m.find()) {

count++;

System.out.println("第"+count+"次的start:"+m.start());

//匹配到的文本的索引

System.out.println("第"+count+"次的start(0):"+m.start());

//默认为匹配到整个文本的索引

System.out.println("第"+count+"次的start(1):"+m.start(1));

//默认为匹配到的文本的第一组的索引

System.out.println("第"+count+"次的start(2):"+m.start(2));

//默认为匹配到的文本的第二组的索引

}

end(int i)与start一样就不写了group(int i)

Patternp=Pattern.compile("([a-z]+)(\\d+)");

Matcherm=p.matcher("a2223ccc123");

intcount=;

while(m.find()) {

count++;

System.out.println("第"+count+"次的group:"+m.group());

//默认为匹配到的文本

System.out.println("第"+count+"次的group(0):"+m.group());

//默认为匹配到的整个文本

System.out.println("第"+count+"次的group(1):"+m.group(1));

//默认为匹配到的文本的第一组

System.out.println("第"+count+"次的group(2):"+m.group(2));

//默认为匹配到的文本的第二组

}

由以上的结果可以看出重构函数的i指的是表达式的组号,i为0默认为全局java 正则表达式 版本号,i为1为第一个,后面同理。使用知道完以上的函数,回到前面,要实现提取一串文字的所有数字可以如何用呢?

Stringreg="\\d+";

Stringtext="我的QQ是:123456我的电话是:10010我的学号是:2016210000";

Patternp=Pattern.compile(reg);

String[]str=p.split(text);

Matcherm=p.matcher(text);

intindex=;//标记

while(m.find()) {

System.out.print(str[index]);

System.out.println(m.group());

index++;

}

让我们来说说结果!

结合以上的分割函数,通过数字分割,得到文字,然后再借助匹配函数,找到字符串里的所有数字,依次输出。我也可以直接获得数字放进一个数组,这样我就存储起来了。当然这是很基础的,我可以添加多几个正则表达式,可以匹配标准具体的邮件,手机号,QQ号等。

参考链接:

- not end -

(我的学习笔记)

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-135744-1.html

java正则表达式版本_java 正则表达式 版本号_java正则表达式?=.*_密码的正则表达式java...相关推荐

  1. java开发简介知识点归纳思维导图_最全的JAVA知识汇总(附讲解和思维导图)

    jvm 一行代码是怎么运行的 首先,java代码会被编译成字节码,字节码就是java虚拟机定义的一种编码格式,需要java虚拟机才能够解析,java虚拟机需要将字节码转换成机器码才能在cpu上执行. ...

  2. java开发可以转什么软件有哪些_转行开发软件Java编程必须会什么

    原标题:转行开发软件Java编程必须会什么 要想开发软,Java编程必须会什么?最起码的就是逻辑思维要好,只要不是特别差就没有什么问题. 数学是相对比较能够体现出一个人的逻辑思维如何. 先想想自己以前 ...

  3. java中double类型占几个字节_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...

    认识基本数据类型 在学习基本数据类型之前,我们先认识一下这两个单词:1.bit --位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为"0"或"1&quo ...

  4. java 密码规则_密码规则(正则表达式)

    java //包含大写字母.小写字母.特殊符号.数字中的任意三项 String pw_pattern = "^(?![A-Za-z]+$)(?![A-Z0-9]+$)(?![a-z0-9]+ ...

  5. Java中创建线程需要使用的类_如何通过使用Java中的匿名类创建线程?

    甲线程是可以同时与该程序的其他部分被执行的功能.所有Java程序都有至少一个称为主线程的线程,该线程由Java虚拟机(JVM)在程序启动时由主线程调用main()方法创建. 在Java中,我们可以通过 ...

  6. java中形参不可以是对象吗_(重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...

    1.0建立二叉树的代码,在java中必须创建二叉树的方法必须用返回值,因为不存在c语言中的引用传递,在java中只有值传递 代码1为正确,代码2(没有使用返回值)为错误.那么为什么之前的例子中将对象作 ...

  7. java创建对象new后面为啥可以传入参数_来复习一下Java的对象知识

    Java中的对象 现在让我们深入了解什么是对象.看看周围真实的世界,会发现身边有很多对象,车,狗,人等等.所有这些对象都有自己的状态和行为. 拿一条狗来举例,它的状态有:名字.品种.颜色,行为有:叫. ...

  8. java用do while语句逆序输出_跟我学java编程—深入理解do-while循环语句的用法

    do-while循环与while循环的不同在于:它先执行循环体中的语句,然后再判断条件是否为真.如果为真则继续循环,如果为假,则终止循环.因此,do-while循环至少要执行一次循环语句.同样当有许多 ...

  9. 在java中私有方法能被重载吗_我可以在Java中重载私有方法吗?

    重载是实现多态的一种机制,其中,一个类包含两个具有相同名称和不同参数的方法. 每当您调用此方法时,方法主体都将基于参数与方法调用绑定. 重载私有方法 是的,我们可以在Java中重载私有方法,但是您可以 ...

  10. java能看懂代码不会写_为什么很多学习Java的人能看懂代码,但就是不会写!

    众所周知,程序员的代码是主观性很强的东西,同样的一个功能,每一个程序员所写出来的代码都不一样,所以这一句名言 "一千个读者心中就有一千个哈姆雷特" 在程序员中同样适用. 而同时能够 ...

最新文章

  1. matlab画复变函数,科学网—复数复变函数的Matlab计算与绘图 - 周铁戈的博文
  2. 比CRUD多一点儿(三):UPDATE、DELETE语句
  3. 菜鸟的DUBBO进击之路(二):Dubbo初识
  4. JavaWeb生成图片验证码
  5. 支付宝小程序组件库开发之自定义switch组件
  6. [译]发布ABP v0.19包含Angular UI选项
  7. VScode+远程服务器docker+C/C++ 代码挑战配置
  8. SpriteBuilder切换解决方案以及CCB的修改与保存
  9. Google GMS认证测试相关
  10. photoshop 前端切图基础教程
  11. ssl证书过期怎么解决?
  12. 视差映射:更逼真的纹理细节表现(上):为什么要使用视差映射
  13. Elasticsearch常见报错和处理方法
  14. 美团App用户界面分析
  15. android path拆分_Android知识总结——Path常用方法解析
  16. 《STL源码剖析》-- stl_construct.h
  17. 最全!互联网大厂的薪资和职级一览
  18. Java基础篇:反射机制详解
  19. 全志JAVA_全志a13开发总结
  20. 重装系统按f几进入u盘启动

热门文章

  1. delphi打印机编程
  2. JavaScript中的各种编码
  3. javascript获取css行内样式
  4. convertTo函数的用法
  5. SCI/SCIE/SSCI/期刊简介及官方查询验证方法
  6. 【OSATE学习笔记】失效模式与影响分析,FMEA(failure mode and effects analysis)
  7. TD-SCDMA迫零块线性均衡
  8. linux udp数据包发送间隔,如何每1 ms发送一次UDP数据包?
  9. lol进服务器时文件损坏,英雄联盟文件损坏怎么修复2018 | 手游网游页游攻略大全...
  10. 实验一计算机基础和网络知识竞赛,邵阳市计算机基础知识竞赛试题