java之正则表达式的使用1
正则表达式:
主要作用:
a.匹配
b.切割
c.替换
d.获取
1.反斜杠和转义字符
废话不多说,直接上demo
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String phoneNum= "28516885191";
- isPhoneNum(phoneNum);
- }
- //
- public static void isPhoneNum(String phoneNum){
- String regex= "1[34578][0-9]{9}";
- String regex2= "1[34578]\\d{9}";
- boolean isPhoneNum= phoneNum.matches(regex);
- System.out.println("is phoneNum? "+ isPhoneNum);
- }
总结
/*
* 正则表达式匹配数字的规则,可以用[0-9]和 \d来表示,
* 但在java语言中,\在字符串中本身是转义字符, 也就是说\不是字符本身的反斜杠\,而是有特殊意义的(转义)
* 正则中,\d,是将普通反斜杠和d连一块,表示数字 (也就是说,正则中的\不是转义字符)。所以java语言中,我们不能直接用\d来表示数字,
* 需要这样:\\d 前一个反斜杠,是转义字符,将第二个反斜杠转义字符转译成 普通的字符反斜杠
*
* */
组的使用及切割:
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String string= "andittttbobmmmmmmmmmmmcyanxxdenim";
- String regex= "(.)\\1+";
- String[] strings= string.split(regex);
- for (String string2 : strings) {
- System.out.println("name: "+ string2 );
- }
- }
output:
name: andi
name: bob
name: cyan
name: denim
总结:
在表达式 ((A)(B(C))) 中,存在四个组:
1 ((A)(B(C)))
2 (A)
3 (B(C))
4 (C)
组零始终代表整个表达式
3.组的使用及替换:
- public static void main(String[] args) {
- String str1_1= "andittttbobmmmmmmmcyanxxdenim";//源字符串
- String regex1= "(.)\\1+";
- //目标字符串: andi#bob#cyan#denim
- String str1_2= str1_1.replaceAll(regex1, "#");
- System.out.println("str1_2: "+ str1_2);
- String str2_1= "andittttbobmmmmmmmcyanxxdenim";//源字符串
- String regex2= "(.)\\1+";
- //目标字符串: anditbobmcyanxdenim
- String str2_2= str2_1.replaceAll(regex2, "$1");
- System.out.println("str2_2: "+ str2_2);
- }
output:
str1_2: andi#bob#cyan#denim
str2_2: anditbobmcyanxdenim
总结:在String.replaceAll()方法中,使用$符号来让第二个参数使用第一个参数的值
4.1切割:
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String path1= "com/westward/p/5399166";//源字符串
- //目标字符串com.westward.5399166
- String regex= "/";
- String path2= path1.replaceAll(regex, ".");
- System.out.println(path2);
- }
output:
com.westward.p.5399166
4.2切割:
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String str= "15800001111";//源字符串
- // 目标字符串:158****1111;
- String regex= "(\\d{3})\\d{4}(\\d{4})";
- String str2= str.replaceAll(regex, "$1****$2");
- System.out.println("str2: "+str2 );
- }
output:
str2: 158****1111
5.获取
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String str= "hah,cheng wei da shen zhi lu!";
- String regex= "\\b\\w{3}\\b";
- Pattern pattern= Pattern.compile(regex);//将正则表达式封装为Pattern类的对象
- Matcher matcher= pattern.matcher(str);//正则对象匹配字符串,生成Matcher对象
- System.out.println(str);
- while (matcher.find()) {//字词匹配一个,判断有无符合
- System.out.println(matcher.group()+";startindex: "+ matcher.start()+ " ,endindex: "+ matcher.end() );
- //。group:取出匹配的 .start:匹配的下标(首字母下标,尾字母下标+1), .end()类似.start()
- }
- }
正则表达式的一些小练习:
- public static void main(String[] args) {
- System.out.println("sayRight() run:");
- sayRight();
- System.out.println("sortIp() run:");
- sortIp();
- System.out.println("checkEmail() run:");
- checkEmail();
- }
- public static void sayRight(){
- //1.切割
- String string= "我我...我我...我我我要...要要要要......要要要要...学学学学学学......学学编编.......编编编编...编..程程....程程";
- string= string.replaceAll("\\.+", "");
- System.out.println(string);
- //2.替换
- string= string.replaceAll("(.)\\1+", "$1");
- System.out.println(string);
- }
- //Example:192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55
- //对上面的ip进行排序,升序
- public static void sortIp(){
- String string1= "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55";
- //1.为了保持位数一直,首先数字前加两个0
- string1= string1.replaceAll("(\\d+)", "00$1");
- System.out.println(string1);
- // 00192.00168.0010.0034 00127.000.000.001 003.003.003.003 00105.0070.0011.0055
- //2.替换为位数一致
- string1= string1.replaceAll("0*(\\d{3})", "$1");//对于00192,0*表示0出现2次;对于0034,0*表示0出现1次;对于003,0*表示0出现0次;
- System.out.println(string1);
- //192.168.010.034 127.000.000.001 003.003.003.003 105.070.011.055
- //3.切割,放到字符串数组
- String[] strings= string1.split(" +");
- TreeSet<String> treeSet= new TreeSet<String>();
- for (String string : strings) {
- treeSet.add(string);//TressSet:默认的为升序
- }
- System.out.println("排序后的: ");
- for (String string : treeSet) {
- System.out.println(string);
- }
- }
- public static void checkEmail(){
- String string= "whjweo123_2@qq.com.c22";
- String regex= "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{2,3}){1,3}";
- boolean isEmail= string.matches(regex);
- System.out.println("isEmail: "+ isEmail);
- }
output:
sayRight() run:
我我我我我我我要要要要要要要要要学学学学学学学学编编编编编编编程程程程
我要学编程
sortIp() run:
00192.00168.0010.0034 00127.000.000.001 003.003.003.003 00105.0070.0011.0055
192.168.010.034 127.000.000.001 003.003.003.003 105.070.011.055
排序后的:
003.003.003.003
105.070.011.055
127.000.000.001
192.168.010.034
checkEmail() run:
isEmail: false
java之正则表达式的使用1的更多相关文章
- java中正则表达式基本用法
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- Java的正则表达式
package RegexTest; /** * Created by hu on 2016/3/29. */ /* * Java的正则表达式 在正则表达式中,用\d表示一位数字,如果在其它语言中使用 ...
- Java与正则表达式
Java与正则表达式 标签: Java基础 正则 正如正则的名字所显示的是描述了一个规则, 通过这个规则去匹配字符串. 学习正则就是学习正则表达式的语法规则 正则语法 普通字符 字母, 数字, 汉字, ...
- Java中正则表达式去除html标签
Java中正则表达式去除html的标签,主要目的更精确的显示内容,比如前一段时间在做类似于博客中发布文章功能,当编辑器中输入内容后会将样式标签也传入后台并且保存数据库,但是在显示摘要的时候,比如显示正 ...
- Java面向对象 正则表达式
Java面向对象 正则表达式 知识概要: (1)正则表达式的特点 (2)正则表达的匹配 (3)正则表达式的切割,替换,获取 (4)正则表达式的练习 正则表达式:符合 ...
- Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码正则表达式
Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正则表达式 ============================== ©Copyright 蕃薯耀 2017年11 ...
- JAVA中正则表达式常用的四个方法
JAVA中正则表达式处理字符串的四个常用方法:匹配.分割.替换.截取.其跟字符串的常用函数相似,但是使用正则表达式会更简单.更加简洁.下面是具体的例子: public class TestRegex ...
- Java对正则表达式的支持(一)
Java对正则表达式的支持主要体现在String.Pattern.Matcher和Scanner类. 1.Pattern.Matcher 先看一个Pattern和Matcher类使用正则表达式的例子. ...
- Java中用正则表达式判断日期格式是否正确
1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...
随机推荐
- SQL基础--查询之二--连接查询
SQL基础--查询之二--连接查询
- Mirror--程序访问镜像数据库的超时机制
程序在访问有镜像的数据库和无镜像的数据库时,采用的链接超时时间算法不一样,因此会导致在在有镜像的数据库上设置了15 S的超时时间,而实际的超时时间仅为3.6 S,从而导致有镜像的数据库更容易超时. 在 ...
- mysql 数据操作 单表查询 where约束 between and or
WHERE约束 where字句中可以使用: 比较运算符:>< >= <= != between 80 and 100 值在80到100之间 >=80 <= ...
- MySQL不能启动 Can't start server : Bind on unix socke
MySQL服务器突然不能启动,查看最后的启动日志如下: 080825 09:38:04 mysqld started080825 9:38:04 [ERROR] Can't start server ...
- nodejs Async详解之二:工具类
Async中提供了几个工具类,给我们提供一些小便利: memoize unmemoize log dir noConflict 1. memoize(fn, [hasher]) 有一些方法比较耗时,且 ...
- 从WW中剥离一个三维场景框架
从WW中剥离一个三维场景框架,初步实现的一个.可以绘制一个三角形,但是不能够控制摄像机,没有增加鼠标事件.没有投影,世界变幻之类的东西.以后会不断学习逐步增加进来. 下载地址 下载V1.0.0.2
- Spring Boot+CXF搭建WebService
Spring Boot WebService开发 需要依赖Maven的Pom清单 <?xml version="1.0" encoding="UTF-8" ...
- eclipse+maven+tomcat构建web工程
我们要利用Maven构建一个web应用,开发环境为eclipse+tomcat.构建过程如下: 1.工具准备 eclipse:版本为eclipse 4.2(Juno Service),maven插件的 ...
- PAT 1142 Maximal Clique[难]
1142 Maximal Clique (25 分) A clique is a subset of vertices of an undirected graph such that every t ...
- PAT 1109 Group Photo[仿真][难]
1109 Group Photo(25 分) Formation is very important when taking a group photo. Given the rules of for ...