正则表达式:

主要作用:

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的更多相关文章

  1. java中正则表达式基本用法

    正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...

  2. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  3. Java的正则表达式

    package RegexTest; /** * Created by hu on 2016/3/29. */ /* * Java的正则表达式 在正则表达式中,用\d表示一位数字,如果在其它语言中使用 ...

  4. Java与正则表达式

    Java与正则表达式 标签: Java基础 正则 正如正则的名字所显示的是描述了一个规则, 通过这个规则去匹配字符串. 学习正则就是学习正则表达式的语法规则 正则语法 普通字符 字母, 数字, 汉字, ...

  5. Java中正则表达式去除html标签

    Java中正则表达式去除html的标签,主要目的更精确的显示内容,比如前一段时间在做类似于博客中发布文章功能,当编辑器中输入内容后会将样式标签也传入后台并且保存数据库,但是在显示摘要的时候,比如显示正 ...

  6. Java面向对象 正则表达式

     Java面向对象 正则表达式 知识概要:                (1)正则表达式的特点 (2)正则表达的匹配 (3)正则表达式的切割,替换,获取 (4)正则表达式的练习 正则表达式:符合 ...

  7. Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码正则表达式

    Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正则表达式 ============================== ©Copyright 蕃薯耀 2017年11 ...

  8. JAVA中正则表达式常用的四个方法

    JAVA中正则表达式处理字符串的四个常用方法:匹配.分割.替换.截取.其跟字符串的常用函数相似,但是使用正则表达式会更简单.更加简洁.下面是具体的例子: public class TestRegex ...

  9. Java对正则表达式的支持(一)

    Java对正则表达式的支持主要体现在String.Pattern.Matcher和Scanner类. 1.Pattern.Matcher 先看一个Pattern和Matcher类使用正则表达式的例子. ...

  10. Java中用正则表达式判断日期格式是否正确

    1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...

随机推荐

  1. Python开发【数据结构】:算法(二)

    堆排序 1.—树与二叉树简介 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构 树是由n个节点组成的集合: 如果n=0,那这是一棵空树: 如果n>0,那存在1个节点作为树的根节点 ...

  2. 第1章 1.9计算机网络概述--OSI参考模型和网络安全

    1.物理层安全: 风险:无关人员接入网络. 防范:将用不到的口的网线拔掉,或者用命令将用不到的网线接口shutdown(关闭). 2.数据链路层安全: ADSL账号密码 无线网账号密码 交换机绑定MA ...

  3. centos tomcat/resin安装配置 卸载系统自带的java tomcat安装配置 安装JDK resin安装配置 第二十八节课

    centos  tomcat/resin安装配置  卸载系统自带的java  tomcat安装配置  安装JDK   resin安装配置    第二十八节课 tomcat和java都不需要编译 tom ...

  4. [转载]ODBC数据源

    在做java数据库连接的时候遇到了点问题. 首先是创建数据源时,odbc里没有要用的驱动,因为我是64位的系统,但是安装的是32位的office..于是去C/windows/syswow64文件夹下, ...

  5. 右值引用与转移语义(C++11)

    参考资料: http://www.cnblogs.com/lebronjames/p/3614773.html 左值和右值定义: C++( 包括 C) 中所有的表达式和变量要么是左值,要么是右值.通俗 ...

  6. active admin常用配置

    ActiveAdmin.register Post do permit_params :title, :content, :deadline, :status menu parent: "论 ...

  7. CCPC-Wannafly Winter Camp Day5 (Div2, onsite)

    Replay: Dup4: 时间复杂度算不对? 一点点思路不经过验证就激动的要死? 浪费自己一个小时还浪费别人一个小时? 对1e3不敏感? 1e3 * 1e3是多少? 模拟建边跑dp不写非要写个大模拟 ...

  8. .net webform 把word转为html

    首先添加引用 引用命名空间 using Microsoft.Office.Interop.Word; using System; using System.Collections.Generic; u ...

  9. 587. Erect the Fence(凸包算法)

    问题 给定一群树的坐标点,画个围栏把所有树围起来(凸包). 至少有一棵树,输入和输出没有顺序. Input: [[1,1],[2,2],[2,0],[2,4],[3,3],[4,2]] Output: ...

  10. CentOS7搭建Gitlab详细过程

    1.参见Gitlab官网说明 原文地址:https://about.gitlab.com/install/#centos-7   1.安装并配置必要的依赖项 在CentOS 7(和RedHat / O ...