1. 对特殊字符进行转义

元字符是在一些在正则表达式里有特殊含义的字符。英文句号”.”是一个元字符,它也可以匹配任何一个单个字符,类似的”[”,”]”也是元字符。

package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string= "[\"a  b.c\"]";String regex = "(\\[\\\"a\tb\\.c\\\"\\])";Pattern pattern = Pattern.compile(regex);Matcher p = pattern.matcher(string);if(p.find()) {System.out.println(string);}}
}结果:
["a    b.c"]

小知识:[\"a b.c\"]本质就是”a\tb.c”,我们在写他的正则时候一定要注意转义符的使用\\[\\\"a\tb\\.c\\\"\\。

[\b]

回退(并删除)一个字符(backsapce)

\f

换页符

\n

换行符

\r

回车符

\t

制表符(tab)

\v

垂直制表符

\d

任何一个数字字符[0-9]

\D

任何一个非数字字符[^0-9]

\w

任何一个[0-9a-zA-Z]字符

\W

任何一个[^0-9a-zA-Z]字符

\s

任何一个空白字符[\f\n\r\t\v]

\S

任何一个非空字符[^\f\n\r\t\v]

\x

十六进制(\x0a--->10)

\0

八进制(\011--->9)

小知识:如果我们要匹配array[10]该怎么匹配呢?我们可以使用array\\[\\d\\d\\]完成如果是100呢?我们将会下面进行解释。

2.使用posix字符类

package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string= "<BODY BGOLOR=\"336633\" TEXT=\"#ffffff\"";String regex = "([p{Digit}[2]])";Pattern pattern = Pattern.compile(regex);Matcher p = pattern.matcher(string);if(p.find()) {System.out.println(string);}}}结果:
<BODY BGOLOR="336633" TEXT="#ffffff"

3.有多少个匹配

小问题:如果我们需要匹配text@text.text的邮箱,我们用以前的知识就会写出\\w@\\w\.\\w,但是问题就来了我们不知道各个部分的长度,这似乎不写的很合理。

3.1匹配一个或多个字符

package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string[]= {"ben@163.com","support@qq.com","abc@yahoo.com"};String regex = "(\\w+@\\w+\\.com)";Pattern pattern = Pattern.compile(regex);for (String xString:string){Matcher p = pattern.matcher(xString);if(p.find()) {System.out.println(xString);}}}
}
结果:
ben@163.com
support@qq.com
abc@yahoo.com

提示:+是一个元字符,如果需要匹配+自身就需要转义符\\+

以上就有一个问题我们a.ben@163.com也是符合要求的,但是我们上面的正则却找不到他,于是我们就需要以下的式子

package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string[]= {"a.ben@163.com","ben@163.com","support@qq.com","abc@yahoo.com"};String regex = "([\\s|(\\w+\\.)]\\w+@\\w+\\.com)";//String regex = "([\\w.]@\\w+\\.com)";Pattern pattern = Pattern.compile(regex);for (String xString:string){Matcher p = pattern.matcher(xString);if(p.find()) {System.out.println(xString);}}}}
结果:
a.ben@163.com
ben@163.com
support@qq.com
abc@yahoo.com

+

一次或多个

*

零次或多个

表示此正则可以出现0次/1次

package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string[]= {"http://www.abc.com","https://www.abc.com","httpss://www.abc.com","httpsss://www.abc.com"};String regex = "(http://[\\w./]+)";Pattern pattern = Pattern.compile(regex);for (String xString:string){Matcher p = pattern.matcher(xString);if(p.find()) {System.out.println(xString);}}}}
结果:
http://www.abc.com
package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string[]= {"http://www.abc.com","https://www.abc.com","httpss://www.abc.com","httpsss://www.abc.com"};String regex = "(http://[\\w./]+)";Pattern pattern = Pattern.compile(regex);for (String xString:string){Matcher p = pattern.matcher(xString);if(p.find()) {System.out.println(xString);}}}}
结果:
http://www.abc.com
package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string[]= {"http://www.abc.com","https://www.abc.com","httpss://www.abc.com","httpsss://www.abc.com"};String regex = "(https+://[\\w./]*)";Pattern pattern = Pattern.compile(regex);for (String xString:string){Matcher p = pattern.matcher(xString);if(p.find()) {System.out.println(xString);}}}}结果:
https://www.abc.com
httpss://www.abc.com
httpsss://www.abc.com

知识点:在windows是使用\r\n作为文本行的结束标签。而linux、unix只是\n。所以我们可以尝试这样写正则:[\\r]?\n。

{n}

正则正好出现n次

{n,m}

正则正好出现n~m次

{n,}

正则至少出现n次

package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string= "<BODY BGOLOR=\"336633\" TEXT=\"#ffffff\"";String regex = "([p{Digit}[2]])";Pattern pattern = Pattern.compile(regex);Matcher p = pattern.matcher(string);if(p.find()) {System.out.println(string);}}}结果:
<BODY BGOLOR="336633" TEXT="#ffffff"
package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string[]= {"1001:$2134.43","1002:$2122.2523","1003:$55.2145","1001:$46664.321"};String regex = "(\\d+:\\$\\d{2,}\\d{2,})";Pattern pattern = Pattern.compile(regex);for (String xString:string){Matcher p = pattern.matcher(xString);if(p.find()) {System.out.println(xString);}}}}
结果:
1001:$2134.43
1002:$2122.2523
1001:$46664.321

贪婪型元字符

懒惰型元字符

*

*?

+

+?

{n,}

{n,}?

package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string= "sdak<B>Ak</B>and<B>HI</B>sdas";String regex = "((<[bB]>.*</[Bb]>))";String result[] = string.split(regex);for (String string2 :result) {System.out.println(string2);}}}
结果:
sdak
sdas
package 正则;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//匹配*a* 类似文本
public class Exp001 {public static void main(String[] args) {// TODO Auto-generated method stubString string= "sdak<B>Ak</B>and<B>HI</B>sdas";String regex = "((<[bB]>.*?</[Bb]>))";String result[] = string.split(regex);for (String string2 :result) {System.out.println(string2);}}}
结果:
sdak
and
sdas

通过上面两个程序我们知道利用贪婪型元字符将”and”也给匹配进去了,而加了?的懒惰型元字符没有,我们写程序的时候需要按照实际需求编写代码。

正则表达式中级应用(java语言版)相关推荐

  1. 装饰器模式代码举例(java语言版)

    前言:为了解决子类膨胀问题,把被装饰的以关联的方式放入装饰类里面,装饰类添加新的功能,如果需要再扩展新功能的时候,那么可以考虑直接继承装饰类.下面是一个画圆的例子(其实ServletRequest.H ...

  2. 大学计算机教育国外著名教材系列 数据结构,经典数据结构(Java语言版)(影印版)——大学计算机教育国外著名教材系列...

    本书最大的特点是,首先定义了抽象数据类型(ADT),然后在此基础上介绍了数据结构的各种概念和知识.这样,读者的注意力不是放在数据结构内部的具体实现,而是集中于其外在功能接口与特性,使读者可以在较短的时 ...

  3. 学生信息管理系统——JAVA 语言版(主页面+增+删+改+查+退)

    学生信息管理系统 前言 一.问题分析 二.学生信息管理系统程序实现思路 三.Student类的创建 程序思路 Student类代码 四.StudentManager类的创建 程序思路 StudentM ...

  4. JAVA语言版之字体格式设置对话框的编程实现

    在编写自己的记事本小程序时,为了给里面的文本设置格式,需要一个格式对话框来进行这方面的设置,但是,在JAVA中,并没有现成的字体格式设置对话框供我们使用,这时,我们就需要自己去设计一个对话框.接下来讲 ...

  5. Leetcode题库-回旋镖的数量(java语言版)

    题目描述: 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到 ...

  6. Java语言程序设计基础篇-第10版-第一部分-程序设计基础)

    Java程序语言设计(基础篇)-第10版 第一部分 程序设计基础 第1章 计算机.程序和Java概述 1.1 引言 程序设计就是创建(或者开发)软件,软件也称为程序. 简言之,软件包含了指令,告诉计算 ...

  7. 《数据结构与抽象:Java语言描述(原书第4版)》一JI2.3 抛出异常

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. H ...

  8. 《数据结构与抽象:Java语言描述(原书第4版)》一2.2.1 可变大小数组

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.2.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timo ...

  9. Java 基础入门随笔(1) JavaSE版——java语言三种技术架构

    1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...

最新文章

  1. [每天进步一点 -- 流水账]第1周
  2. crf的实现 keras_你的 CRF 层的学习率可能不够大
  3. 我的世界暮色森林java下载_我的世界暮色森林mod1.7.2下载-暮色森林整合包下载...
  4. Bootstrap学习一
  5. UVa1401 Remember the Word(DP+Trie树)
  6. 【数据结构笔记21】图的遍历,DFS与BFS,连通图
  7. RHCE 学习笔记(4)- 重定向,管道和VIM编辑器
  8. 汽车故障检测仪计算机教程,如何使用汽车故障诊断仪进行汽车维修
  9. python中的def是什么意思啊_python的def是什么意思
  10. matlab怎么表示循环求和,matlab循环求和
  11. 几种常见的HTML分割线
  12. 洛谷 P1304 哥德巴赫猜想
  13. 苹果风格ui设计_重新设计苹果音乐应用程序ui ux案例研究
  14. Mentor-dft 学习笔记 day44-Low-Power Design Test
  15. 狼人杀总结之“警下预言家 必是真预言家”
  16. 想要转行软件测试,这个技能好学吗?前景怎么样呢
  17. 八旬老翁收破烂抚养六名弃儿
  18. 群体进化技术原理和研究思路
  19. 揭秘Serverless SSR应用监控平台
  20. 如何对NetSuite售前进行报价

热门文章

  1. OpenGL之基本图元
  2. javaweb JAVA JSP 流浪狗管理系统(宠物狗管理系统)jsp小宠物在线管理网站源码
  3. 数学,离一个程序员有多近?
  4. 2016全国房价趋势
  5. python基础(第九章)面向对象
  6. ogm session_Hibernate OGM:降低进入NoSQL的障碍
  7. 等待事件 latch:cache buffers chains
  8. Office 2008 for Macintosh: The Missing Manual
  9. OFD格式的电子发票文件怎么免费转换成PDF
  10. 百度统计php,百度统计