正则表达式中级应用(java语言版)
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语言版)相关推荐
- 装饰器模式代码举例(java语言版)
前言:为了解决子类膨胀问题,把被装饰的以关联的方式放入装饰类里面,装饰类添加新的功能,如果需要再扩展新功能的时候,那么可以考虑直接继承装饰类.下面是一个画圆的例子(其实ServletRequest.H ...
- 大学计算机教育国外著名教材系列 数据结构,经典数据结构(Java语言版)(影印版)——大学计算机教育国外著名教材系列...
本书最大的特点是,首先定义了抽象数据类型(ADT),然后在此基础上介绍了数据结构的各种概念和知识.这样,读者的注意力不是放在数据结构内部的具体实现,而是集中于其外在功能接口与特性,使读者可以在较短的时 ...
- 学生信息管理系统——JAVA 语言版(主页面+增+删+改+查+退)
学生信息管理系统 前言 一.问题分析 二.学生信息管理系统程序实现思路 三.Student类的创建 程序思路 Student类代码 四.StudentManager类的创建 程序思路 StudentM ...
- JAVA语言版之字体格式设置对话框的编程实现
在编写自己的记事本小程序时,为了给里面的文本设置格式,需要一个格式对话框来进行这方面的设置,但是,在JAVA中,并没有现成的字体格式设置对话框供我们使用,这时,我们就需要自己去设计一个对话框.接下来讲 ...
- Leetcode题库-回旋镖的数量(java语言版)
题目描述: 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到 ...
- Java语言程序设计基础篇-第10版-第一部分-程序设计基础)
Java程序语言设计(基础篇)-第10版 第一部分 程序设计基础 第1章 计算机.程序和Java概述 1.1 引言 程序设计就是创建(或者开发)软件,软件也称为程序. 简言之,软件包含了指令,告诉计算 ...
- 《数据结构与抽象:Java语言描述(原书第4版)》一JI2.3 抛出异常
本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. H ...
- 《数据结构与抽象:Java语言描述(原书第4版)》一2.2.1 可变大小数组
本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.2.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timo ...
- Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...
最新文章
- [每天进步一点 -- 流水账]第1周
- crf的实现 keras_你的 CRF 层的学习率可能不够大
- 我的世界暮色森林java下载_我的世界暮色森林mod1.7.2下载-暮色森林整合包下载...
- Bootstrap学习一
- UVa1401 Remember the Word(DP+Trie树)
- 【数据结构笔记21】图的遍历,DFS与BFS,连通图
- RHCE 学习笔记(4)- 重定向,管道和VIM编辑器
- 汽车故障检测仪计算机教程,如何使用汽车故障诊断仪进行汽车维修
- python中的def是什么意思啊_python的def是什么意思
- matlab怎么表示循环求和,matlab循环求和
- 几种常见的HTML分割线
- 洛谷 P1304 哥德巴赫猜想
- 苹果风格ui设计_重新设计苹果音乐应用程序ui ux案例研究
- Mentor-dft 学习笔记 day44-Low-Power Design Test
- 狼人杀总结之“警下预言家 必是真预言家”
- 想要转行软件测试,这个技能好学吗?前景怎么样呢
- 八旬老翁收破烂抚养六名弃儿
- 群体进化技术原理和研究思路
- 揭秘Serverless SSR应用监控平台
- 如何对NetSuite售前进行报价