正则表达式在Java中使用
正则表达式
定义
用一组特殊的字符来描述一组字符串的格式
用于验证字符串是否满足格式
不关心字符串的内容是否有效
1. 基本正则表达式
所谓正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式规则,然后使用该格式规则匹配某个字符串是否符合格式要求。
“.”和"\"
"."点儿,在正则表达式中标是任意一个字符。
"\"在正则表达式中是转意字符,当我们需要描述一个已经被正则表达式使用的特殊字符时,我们就可以通过使用"\"将其转变为原本的意思。
\\s 转译字符
"\"在正则表达式中也有一些预定义的特殊内容:
\d:表示任意一个数字
\w:表示任意一个单词字符(只能是 数字,字母,下划线)
\s:表示任意一个空白字符(\t \r \n \f \x0B)
\D:表示任意一个非数字字符
\W:表示任意一个非单词字符
\S:表示任意一个非空白字符
^"和"$"
通过在正则表达式的开始添加"^"以及末尾添加"$"来表示一个整体。若不使用它们,那么正则表达式只匹配某个字符串的部分内容是否符合格式规则,但使用它们,则要求字符串必须从头到尾都满足该格式规则。
例如:
^\w{ 8,10 }$ 表示整体字符串只能出现单词字符8-10个
"字符集合 []"
"[]"用来描述单一字符,方括号内部可以定义这个字符的内容,也可以描述一个范围。
例如:
[abc]:表示该字符只能是a或者b或者c
[123]:表示该字符只能是1或者2或者3
当我们需要描述所有小写字母是,我们可以使用范围
[a-z]:表示该字符可以是任意一个小写字母
同样还可以:
[0-9]:表示该字符可以是任意一个数字
也可以在多个范围内选择:
[a-zA-Z0-9_]:表示该字符可以是任意字母,数字以及"下划线"
"*"、"+"、"?"
通常我们需要描述的字符串会有很多重复出现的元素,但又不需要严格限制出现的次数时,我们就可以使用"*","+"这些量词。
例如:邮箱地址,那么在"@"字符前允许出现若干字符作为用户名。这时候我们就可以使用"\w+"来描述这里至少出现一个单词字符了。
"+":表示内容可以连续出现至少1次以上
"*":表示内容出现0-若干次
"?":表示内容出现0-1次
{n}、{n,}{n,m}
除了量词外,有时我们也需要要求内容出现的次数有具体要求。比如手机号码。这时我们要求出现的数字就不能是一个模糊的概念了,而必须要求11位。又比如我们要求用户输入密码时,要求密码是6-15位。遇到这类问题是,我们可以使用:
{n}:表示内容必须出现n次
{n,m}:表示内容出现n-m次
{n,}:表示内容出现至少n次
例如:
\d{11}:就表示数字只能出现11位,这样就解决了上述的问题。
分组
通过上面的内容,我们还无法解决类似下面的问题:
在描述电话号码时,前面有区号,区号的形式可以是0086或者+86
那么我们如何在这两个字符串之间选择?
这时我们可以使用分组"()"
():可以将内容看做一个整体
()中可以使用"|"来表示或关系。例如:
(+86|0086):表示这里可以是+86或者0086。
\. 表示符号 .表示任意一个符号
String正则相关API
1. matches方法
matches()方法的参数要求我们传入一个用字符串描述的正则表达式,然后使用该正则表达式描述的字符串格式规则来匹配当前字符串,若满足那么该方法返回true。否则返回false.
^[0-9]{5,8}&
java 中 string的方法match 就是全匹配,不写^$也是可以的
2. split方法
String[] split(String regex):参数要求传入一个用字符串描述的正则表达式,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并按照满足的部分将字符串拆分。
案例一 /**
* 切割字符串 当字符串中最后的内容练习满足正则表达式要求时 切除的空字符串全部忽略
*/
String str2 = "java.cpp.php.py.c#";
String[] array = str2.split("\\.");
System.out.println(array.length);
System.out.println(Arrays.toString(array));
}
}
案例二
/**
*1. 将图片名根据.拆分
*2.取第二项(后缀名)
*3.生成系统时间的毫秒值,拼上后缀
*
*/
String imgName = "11.jpg";
String[] names = imgName.split("\\.");
String ln =names[1];
imgName=System.currentTimeMillis()+"."+ln; //系统时间
System.out.println(imgName);
}
3. replaceAll方法
满足则替换
String replaceAll(String regex,String replacement):参数要求传入一个用字符串描述的正则表达式和一个需要替换的字符串,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并将满足的部分替换为需要替换的这个字符串。
String str3 ="abc123cef8df77";
str3 =str3.replaceAll("\\d+", "数字");
System.out.println(str3); 和谐脏话 String regex1 = "(sb|qnmlgb|cnm|tmd)";
String message ="你个sb!怎么操作!tnnd";
message = message.replaceAll(regex1, "***");
System.out.println(message);
正则表达式在Java中使用的更多相关文章
- 正则表达式在Java中的使用
目录 介绍 从简单例子认识正则表达式匹配 Java中对正则表达式的支持(各种语言有相应的实现) 初步认识 . + * ? 范围 认识\s \w \d - 下面介绍数字和字母的正则表达, 这是编程中使用 ...
- 正则表达式在Java中应用的三种典型场合:验证,查找和替换
正则式在编程中常用,总结在此以备考: package regularexp; import java.util.regex.Matcher; import java.util.regex.Patter ...
- 正则表达式在java中的用法
/** * 测试正则表达式的基本用法 Pattern 和 Matcher * @author 小帆敲代码 * */public class Demo01 { public static void m ...
- 利用正则表达式判断Java中的秒钟、分钟、小时、日、月是否符合规则
// 定义校验规则 Pattern patRule = Pattern.compile("判断规则"); // 校验结果 patRule.matcher("判断的对象&q ...
- java中的正则表达式捕获组与引用的概念
今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个 "(([1-9]\\d?)\\s){2}$2&q ...
- 9.JAVA中的正则表达式
一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ? #{0,1}-?有一个-或者没有 \\ #表示一个" ...
- java中正则表达式基本用法
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- Java中正则表达式、模式匹配与信息抽取
引言 记得几年前在做网页爬虫后的信息抽取时,针对网页源码中隐藏的要提取的信息,比如评论.用户信息等属性信息,直接利用HtmlParser得到.如此做倒是简单,不过利用的是网页的规范的tag标记.其实j ...
随机推荐
- 到底什么是故事点(Story Point)?
故事点是一个度量单位,用于表示完成一个产品待办项或者其他任何某项工作所需的所有工作量的估算结果. 当采用故事点估算时,我们为每个待办项分配一个点数.待办项估算结果的原生数据并不重要,我们只关注最后得到 ...
- CountHunter 6101 最优贸易 强联通缩点
题目传送门 题解:强连通锁点之后. 就成了一副单向图. 然后对于每个点 找到 后面合法的点的最大值就好了. 合法就是后面的那个点可以走到n号点. 也可以正向跑一遍dij 求出到这个点的最小花费. 然后 ...
- CF 13E Holes
Holes 题意:现在有一排洞,每个洞有一个弹力,能弹到ai之后的洞,球会弹到这个排的外面,现在有2个操作,0 a b 将第a个洞的弹力设为b, 1 a 将球放入第a个洞,求输出进洞的次数 和 弹出这 ...
- codeforces 862 C. Mahmoud and Ehab and the xor(构造)
题目链接:http://codeforces.com/contest/862/problem/C 题解:一道简单的构造题,一般构造题差不多都考自己脑补,脑洞一开就过了 由于数据x只有1e5,但是要求是 ...
- hdu 1176免费馅饼(记忆化搜索)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意不解释了 简单的记忆化搜索可以拿来练练手,注意要从pos = 5 开始搜索 #include ...
- CF995B Suit and Tie 贪心 第十三
Suit and Tie time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- .net core Webapi +EF
开发工具 Vs2017 +MSsqlsever 打开VS2017,新建web项目 点击确认,生成项目,在项目中增加文件夹Model,在Model中增加类TodoItem public class To ...
- 带你深入了解NPM——NPM初学者指南
前段时间,我们邀请了我们“城内”(葡萄城)资深开发工程师刘涛为大家分享了一次干货满满的关于Electron线上公开课,在课程过程中有不少同学对于NPM的概念和用法有一些疑问,所以这次我们希望通过这篇文 ...
- Python作业本——第4章 列表
课后习题: 1.[]是一个空列表 2. spam.insert(3, 'hello') 错,应为:spam[2] = 'hello' 3.['d'] 'd' 4.['d'] 'd' 5.[ ...
- Cloudera版本的hadoop环境准备
对于普通学习用户而言,应该先下载一个虚拟机, 推荐vmware,因为是免费的. Hadoop环境有三个版本: Apache版本(Apache基金会) CDH(cloudera公司) hdp版本(Hor ...