一直都觉得正则表达式是个很神奇很深奥的东西,今天算是好好的学习了下,写篇博客和大家交流交流。
(一)正则表达式是什么?有什么功能??
定义:正则表达式是一种可以用于模式匹配和替换的强有力的工具
功能:一串字符串中查找符合要求的字符串、替换指定的字符、判断一段字符串是否格式正确
(二)正则表达式的各种符号及其含义
常用的符号 |
|
. |
表示任意一个字符 |
\s |
空格字符(空格键, tab, 换行, 换页, 回车) |
\S |
非空格字符([^\s]) |
\d |
一个数字,(相当于[0-9] ) |
\D |
一个非数字的字符,(相当于[^0-9] ) |
\w |
一个单词字符(word character) (相当于 [a-zA-Z_0-9] ) |
\W |
一个非单词的字符,[^\w] |
^ |
一行的开始 |
$ |
一行的结尾 |
\b |
一个单词的边界 |
\B |
一个非单词的边界 |
\G |
前一个匹配的结束 |
[] |
匹配方括号内的一个字符 |
例如:[abc] 表示字符 a,b,c 中的任意一个(与 a|b|c 相同) [a-zA-Z] 表示从 a 到 z 或 A 到 Z 当中的任意一个字符 |
|
表示次数的符号 |
|
* |
重复零次或更多次 |
例如:a* 匹配零个或者多个 a |
|
+ |
重复一次或更多次 |
例如:a+ 匹配一个或者多个 a |
|
? |
重复零次或一次 |
例如:a? 匹配零个或一个 a |
|
{n} |
重复 n 次 |
例如:a{4} 匹配 4 个 a |
|
{n,} |
重复 n 次或更多次 |
例如:a{4,} 匹配至少 4 个 a |
|
{n,m} |
重复 n 到 m 次 |
例如:a{4,10} 匹配 4~10 个 a |
(三)如何在程序中使用正则表达式
共分三步:
①构造一个模式.
Pattern p=Pattern.compile("[a-z]*");
②建造一个匹配器
Matcher m = p.matcher(str);
③进行判断,得到结果
boolean b = m.matches();
主要使用到的两个类:Pattern
static Pattern |
compile(String regex) 将给定的正则表达式编译到模式中。 |
static Pattern |
compile(String regex, int flags) 将给定的正则表达式编译到具有给定标志的模式中。 |
int |
flags() 返回此模式的匹配标志。 |
Matcher |
matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器。 |
static boolean |
matches(String regex, CharSequence input) 编译给定正则表达式并尝试将给定输入与其匹配。 |
String |
pattern() 返回在其中编译过此模式的正则表达式。 |
static String |
quote(String s) 返回指定 String 的字面值模式 String 。 |
String[] |
split(CharSequence input) 围绕此模式的匹配拆分给定输入序列。 |
String[] |
split(CharSequence input, int limit) 围绕此模式的匹配拆分给定输入序列。 |
String |
toString() 返回此模式的字符串表示形式 |
类 Matcher的API
Matcher |
appendReplacement(StringBuffer sb, String replacement) 实现非终端添加和替换步骤。 |
StringBuffer |
appendTail(StringBuffer sb) 实现终端添加和替换步骤。 |
int |
end() 返回最后匹配字符之后的偏移量。 |
int |
end(int group) 返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。 |
boolean |
find() 尝试查找与该模式匹配的输入序列的下一个子序列。 |
boolean |
find(int start) 重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。 |
String |
group() 返回由以前匹配操作所匹配的输入子序列。 |
String |
group(int group) 返回在以前匹配操作期间由给定组捕获的输入子序列。 |
int |
groupCount() 返回此匹配器模式中的捕获组数。 |
boolean |
hasAnchoringBounds() 查询此匹配器区域界限的定位。 |
boolean |
hasTransparentBounds() 查询此匹配器区域边界的透明度。 |
boolean |
hitEnd() 如果匹配器执行的最后匹配操作中搜索引擎遇到输入结尾,则返回 true。 |
boolean |
lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配。 |
boolean |
matches() 尝试将整个区域与模式匹配。 |
Pattern |
pattern() 返回由此匹配器解释的模式。 |
static String |
quoteReplacement(String s) 返回指定 String 的字面值替换 String 。 |
Matcher |
region(int start, int end) 设置此匹配器的区域限制。 |
int |
regionEnd() 报告此匹配器区域的结束索引(不包括)。 |
int |
regionStart() 报告此匹配器区域的开始索引。 |
String |
replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列。 |
String |
replaceFirst(String replacement) 替换模式与给定替换字符串匹配的输入序列的第一个子序列。 |
boolean |
requireEnd() 如果很多输入都可以将正匹配更改为负匹配,则返回 true。 |
Matcher |
reset() 重置匹配器。 |
Matcher |
reset(CharSequence input) 重置此具有新输入序列的匹配器。 |
int |
start() 返回以前匹配的初始索引。 |
int |
start(int group) 返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引。 |
MatchResult |
toMatchResult() 作为 MatchResult 返回此匹配器的匹配状态。 |
String |
toString() 返回匹配器的字符串表示形式。 |
Matcher |
useAnchoringBounds(boolean b) 设置匹配器区域界限的定位。 |
Matcher |
usePattern(Pattern newPattern) 更改此 Matcher 用于查找匹配项的 Pattern。 |
Matcher |
useTransparentBounds(boolean b) 设置此匹配器区域边界的透明度 |
(四)使用示例
4.1判断字符串格式是否正确
private void test(){ Pattern p = Pattern.compile("a*b");; //正则表达式 Matcher m = p.matcher("baaaaab"); //操作的字符串 //正则表达式表示首字母是a,中间是任意字符,结尾以b结束 boolean b = m.matches(); System.out.println("匹配结果:"+b); //输出:false //匹配的结果 m = p.matcher("aaaaab"); b = m.matches(); System.out.println("匹配结果:"+b); //输出:true }
4.2判断是否为电话号码
private void test(){ //1开头的 第二个字符是3或者5 剩下9位数字 Pattern p = Pattern.compile("^[1][3,5]+\\d{9}");; //正则表达式 Matcher m = p.matcher("13812345678"); //操作的字符串 boolean b = m.matches(); System.out.println("匹配结果:"+b); //输出:true //匹配的结果 m = p.matcher("03812345678"); b = m.matches(); System.out.println("匹配结果:"+b); //输出:false }
4.3 判断是否为IP地址
private void test(){ //一到三个数字 . 一到三个数字 . 一到三个数字 . 一到三个数字 Pattern p = Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");; //正则表达式 Matcher m = p.matcher("192.168.1.1"); //操作的字符串 boolean b = m.matches(); System.out.println("匹配结果:"+b); //输出:true //匹配的结果 m = p.matcher("192.168.1.1234"); b = m.matches(); System.out.println("匹配结果:"+b); //输出:false }
4.4判断是否为email
private void test(){ Pattern p = Pattern.compile(".*[@].*[.].*");; //正则表达式 Matcher m = p.matcher("user@test.com"); //操作的字符串 boolean b = m.matches(); System.out.println("匹配结果:"+b); //输出:true //匹配的结果 m = p.matcher("user.test.com"); b = m.matches(); System.out.println("匹配结果:"+b); //输出:false }
4.5 判断是否为中文字
private void test(){ //\u4e00-\u9fa5 unicode编码,一种全世界语言都包括的一种编码。是所有汉字的编码 Pattern p = Pattern.compile("^[\u4e00-\u9fa5]+$");; //正则表达式 Matcher m = p.matcher("貂禅"); //操作的字符串 boolean b = m.matches(); System.out.println("匹配结果:"+b); //输出:true //匹配的结果 m = p.matcher("nick"); b = m.matches(); System.out.println("匹配结果:"+b); //输出:false }
4.6以指定字符为间隔的拆分字符串
private void test(){ //以数字为分隔区分字符串 Pattern p=Pattern.compile("\\d+"); //将所含数字去掉 String str[] = p.split("aa11bbb33cc55gg"); for (int i = 0; i < str.length; i++) { System.out.println(str[i]); } //结果为aa bbb cc gg }
4.7替换字符串
private void test(){ Pattern p = Pattern.compile("\\d+"); //将所含数字全部替换为___ Matcher m = p.matcher("aa11bbb33cc55gg"); String str = m.replaceAll("___"); System.out.println(str); //结果为aa___bbb___cc___gg }
4.8替换字符串
private void test(){ Pattern p = Pattern.compile("55"); Matcher m = p.matcher("aa11bbb33cc55gg55yy"); StringBuffer sb = new StringBuffer(); while (m.find()) { m.appendReplacement(sb, "@@");//用@@替换所有的55 } System.out.println(sb.toString());//打印aa11bbb33cc@@gg@@ m.appendTail(sb);//将最后一次替换后的字符串加上 System.out.println(sb.toString());//打印aa11bbb33cc@@gg@@yy }
(五)总结
通过以上的学习,大家对正则表达式应该有了初步的了解和认识,在以后的学 习和工作中逐渐加深对 Java 正则表达式的理解,一定会在编程的过程中起到很大作用的。
PS:附件内是执行以上示例的工程,大家可以下载导入Eclipse内直接执行查看结果,更好的学习 正则表达式
相关推荐
Python正则表达式全套笔记v0.3 本文档是小小明个人笔记,涵盖了正则表达式的各个方面,包括各种模式、分组、断言、匹配、查找、替换和切割等。文档中提供了详细的正则匹配规则表,涵盖了基本字符规则、预定义字符集...
正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串处理的各个领域。正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换...
在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...
在Qt框架中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员以结构化的方式匹配、查找、替换或验证字符串。本项目针对Qt的lineEdit组件,通过正则表达式实现了输入限制功能,使得lineEdit...
Java使用正则表达式提取XML节点内容的方法示例 Java使用正则表达式提取XML节点内容的方法示例主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作...
标题中的“pb 使用正则表达式源码pbregexp”指的是在PowerBuilder(简称pb)环境中,利用名为“pbregexp”的正则表达式组件来实现源代码级别的正则表达式操作。PowerBuilder是一款流行的可视化的、面向对象的软件...
正则表达式类库则为VC++和MFC的开发者提供了对正则表达式功能的支持。 "VC、VC++,MFC 正则表达式类库"指的是在MFC中实现或集成的正则表达式处理模块。这个库通常包含一系列的类和函数,允许程序员编写符合特定模式...
C语言正则表达式库是用于在C编程环境中处理和匹配正则表达式的软件库。这个库名为PCRE(Perl Compatible Regular Expressions),正如其名,它与Perl语言中的正则表达式语法高度兼容,提供了丰富的功能和强大的匹配...
正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...
随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。本书是讲解正则表达式的经典之作。本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校...
"正则表达式必知必会" 正则表达式是一种强大的文本处理工具,广泛应用于各个领域。下面是对正则表达式的详细解释: 正则表达式的用途 正则表达式主要用于处理文本,提供了两大主要功能:查找和替换。查找功能允许...
正则表达式验证工具 V1.0 本软件主要用于检测正则表达式是否正确。 运行环境:本软件为绿色软件,无需安装,但需要Microsoft .NET Framework 4 支持,如果没有请前去下载(下载路径:...
例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...
正则表达式作为一种文本处理工具,在计算机编程和数据处理领域中扮演着极其重要的角色。它不仅适用于几乎所有编程语言和计算机平台,而且能够执行复杂的文本搜索、匹配、替换和提取操作。正则表达式的核心是通过定义...
正则表达式自动生成器V2.0.0.1是一款强大的工具,旨在帮助用户方便快捷地构建和测试正则表达式。它提供了多语言支持,使得不同地区的用户都能无障碍地使用。在IT领域,正则表达式是进行文本处理、数据验证和搜索替换...
正则表达式(Regular Expression,简称regex)是一种用于匹配字符串的强大工具,广泛应用于文本处理、数据验证、搜索和替换等场景。在编程语言中,正则表达式通常以字符串的形式存在,通过特定的语法和模式来定义...
### 正则表达式基础知识与应用 #### 一、正则表达式的定义及用途 正则表达式(Regular Expression)是一种强大的文本处理工具,能够帮助用户查找、替换以及操作特定的字符串或字符组合。它在多种编程语言和操作...
Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...
在IT行业中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找、替换等操作。C++作为一种通用编程语言,虽然标准库中没有内置正则表达式支持,但通过第三方库如Boost,我们可以很方便地在...