【7】java之正则表达式
一、正则标记
所有的正则可以使用的标记都在 java.util.regex.Pattern 类里定义。
1.1 单个字符
- 字符:表示由一位字符所组成;
- \\\\:表示转义字符"\\";
- \\t:表示一个“\\t”字符;
- \\n:匹配换行“\\n”符号;
1.2 字符集
- [abc]:表示可能是字符a或者字符b或者字符c中的任意一位;
- [^abc]:表示不是字符a、b、c中的任意一位(求反的意思);
- [a-z]:所有的小写字母;
- [a-zA-Z]:表示任意一位字母,不区分大小写;
- [0-9]:表示任意的一位数字;
1.3 简化的(预定义的)字符集表达式
- .:匹配除了换行符“\\n”以外的任意一个字符;
- \\d:等价于[0-9],属于简化写法;
- \\w:等价于[a-zA-Z_0-9],表示由任意的字母、数字 和 _ 所组成;
- \\s:表示任意的空白字符,例如:"\\t","\\n";
- \\D:等价于【^0-9】非数字字符,属于简化写法;
- \\W:等价于【^a-zA-Z_0-9],表示不是由任意的字母、数字 和 _ 所组成;
- \\S:表示任意的非空白字符;
1.4 边界匹配
不要在 Java 中使用(java 不支持),在 JavaScript 使用。
- ^:正则的开始;
- \$:正则的结束;
1.5 数量表达
- 正则?:表示此正则出现0次或1次;
- 正则+:表示此正则出现1次或1次以上;
- 正则*:表示此正则出现0次、1次或者1次以上;
- 正则{n}:表示此正则出现n次;
- 正则{n,}:表示此正则出现n次以上(包含 n 次);
- 正则{n,m}:表示此正则出现n ~ m次;
1.6 逻辑运算
- 正则1正则2:正则1判断完成后继续判断正则2;
- 正则1|正则2:正则1或者正则2有一组满足即可;
- (正则):将多个正则作为1组,可以为这一组单独设置出现的次数。
二、String 类对正则的支持
在 JDK 1.4之后,由于正则的引入,所以 String 类里也相应的增加了新的操作方法支持。
以下 String 类对正则支持的5个方法,要记下来。
| No. | 方法名称 | 描述 | | :--: | :--------------------------------------: | :--------------------------: | | 1 | public boolean matches(String regex) | 正则验证,使用指定的字符串判断其是否符合给出的正则表达式 | | 2 | public String replaceAll(String regex, String replacement) | 满足正则表达式的全部替换 | | 3 | public String replaceFirst(String regex, String replacement) | 替换首个 | | 4 | public String[] split(String regex) | 根据regex,将剩余的全部拆分 | | 5 | public String[] split(String regex, int limit) | 根据regex,将剩余的部分拆分 |
给出的几个方法里,替换和拆分实际难度不高,最关键的就是正则匹配,在验证上使用的特别多。
范例1:字符串替换
只保留 "wodhaghlgjl79837()@#\$%^&aRFGGH"字符串中的小写字母,并输出。
public class TestDemo {
public static void main(String args[]){
String str = "wodhaghlgjl79837()@#\$%^&aRFGGH";
String regex = "[^a-z]";
String str1 = str.replaceAll(regex,"");
System.out.println(str1);
}
}
范例2:字符串拆分
将以下字符串按照数字拆分 "wodhaghlgjl79837()@#\$%^&aRFG435GH",并输出。
public class TestDemo {
public static void main(String args[]){
String str = "wodhaghlgjl79837()@#\$%^&a87RFG435GH";
String regex = "\\\\d+";
String data[] = str.split(regex);
for (int i=0;i<data.length; i++){
System.out.println(data[i]);
}
}
}
范例3:验证
验证一个字符串是否是数字,如果是则将其变成 double 型。
数字可能是整数也可能是小数。
public class TestDemo {
public static void main(String args[]){
String str = "10.34";
String regex = "\\\\d+((.\\\\d+)?)";
if (str.matches(regex)){
System.out.println(Double.parseDouble(str));
}
}
}
范例4:判断给定的字符串是否是一个IP地址(IPV4)
IP 地址: 192.168.1.1
public class TestDemo {
public static void main(String args[]){
String str = "192.187.2.42";
String regex = "\\\\d{1,3}(\\\\.\\\\d{1,3}){3}";
System.out.println(str.matches(regex));
}
}
范例5:判断是否是日期格式
给定一个字符串,要求判断其是否是日期格式,如果是则将其转换为 Date 格式
public class TestDemo {
public static void main(String args[]) throws ParseException {
String str = "2017-1-23";
String regex = "\\\\d{4}(-\\\\d{1,2}){2}";
if (str.matches(regex)){
Date date = new SimpleDateFormat("yyyy-mm-dd").parse(str);
System.out.println(date);
}
}
}
范例六:判断电话号码
一般要编写电话号码,以下几种格式都是满足的:
- 格式一:51283346(电话号码一般长度是 7 ~ 8 位);
- 格式二:010-51283346(区号一般长度是 3 ~ 4 位);
- 格式三:(010)-51283346
public class TestDemo {
public static void main(String args[]){
//- 格式一:51283346
//- 格式二:010-51283346
//- 格式三:(010)-51283346
String str = "(010)-51283346";
String regex = "((\\\\d{3,4}-)?|(\\\\(\\\\d{3,4}\\\\)-)?)\\\\d{7,8}";
System.out.println(str.matches(regex));
}
}
范例七:验证 email 地址
格式要求:email 由字母、数字和 _ 组成,其中开头必须是字母,结尾可以是字母或数字,用户名长度不超过30,最后的根域名只能是.com、.cn、.net、.com.cn、.net.cn、.edu、.gov、.org。
public class TestDemo {
public static void main(String args[]){
String str = "hdasf101234jk868954@qq.com.cn";
String regex = "[a-zA-Z]\\\\w{0,28}[a-zA-Z0-9]@\\\\w+\\\\.(com|cn|net|com\\\\.cn|net\\\\.cn|gov|org|edu)";
System.out.println(str.matches(regex));
}
}
三、java.util.regex 包支持
在大多数情况下使用正则的时候都会采用 String 类完成,但是正则最原始的开发包是 java.util.regex,这个包里面也提供有两个类。
范例:Pattern 类
public class TestDemo {
public static void main(String args[]){
String str = "hdasf101234jk868954@qq.com.cn";
String regex = "\\\\d+";
Pattern pattern = Pattern.compile(regex); // 编译正则
String data[] = pattern.split(str); // 拆分字符串
for (int i=0; i<data.length; i++){
System.out.println(data[i]);
}
}
}
正是因为 String 类本身就已经支持这样的操作了,所以对于 String 类而言很少会用 Pattern 与 Matcher 这两个类进行操作了。
【7】java之正则表达式的更多相关文章
- 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 ...
随机推荐
- Django框架:8、聚合查询、分组查询、F与Q查询、ORM查询优化、ORM事务操作、ORM常用字段类型、ORM常用字段参数
Django 数据库 目录 Django 数据库 一.聚合查询 二.分组查询 三.F查询与Q查询 1.F查询 2.Q查询 3.Q查询进阶操作 四.ORM查询优化 1.only与defer 五.ORM事 ...
- TortoiseGit (小乌龟安装配置及使用)
TortoiseGit 使用教程 (图文详解) 第一步 下载Git:下载地址:https://gitforwindows.org 第二步 下载TortoiseGit 以及 汉化包 (安装教程这里就不详 ...
- Python实验报告(第10章)
实验10:文件及目录操作 一.实验目的和要求 1.掌握基本文件操作(创建.打开.关闭.写入): 2.掌握目录操作的基本操作(创建.删除.遍历): 3.了解高级文件操作(删除文件.获取文件基本信息). ...
- 【转载】EXCEL VBA 20个有用的ExcelVBA代码
1.显示多个隐藏的工作表 如果你的工作簿里面有多个隐藏的工作表,你需要花很多时间一个一个的显示隐藏的工作表. 下面的代码,可以让你一次显示所有的工作表 Sub UnhideAllWoksheets() ...
- [WPF]颜色主题功能
效果 点击选择皮肤颜色 代码 public enum Themes { Blue, Gray, Orange } /// <summary> /// 主题颜色管理类 /// </su ...
- Pollard_Rho算法
数论 Pollard_Rho算法 1.1作用 Pollard_Rho算法解决大数的质因数分解.又是一个玄学算法.. 2.1 试除法 我们的任务是对一个数字n进行质因数分解.可以发现,n的因数将会对称的 ...
- C# lock 、 Monitor Wait、Pulse和PulseAll 的区别和用法(转载)
1.Monitor.Wait方法当线程调用 Wait 时,它释放对象的锁并进入对象的等待队列,对象的就绪队列中的下一个线程(如果有)获取锁并拥有对对象的独占使用.Wait()就是交出锁的使用权,使线程 ...
- Java 进阶P-5.3+P-5.4
封装 增加可扩展性 可以运行的代码!=良好的代码 对代码做维护的时候最能看出代码的质量 如果想要增加一个方向,如down或up 用封装来降低耦合 Room类和Game类都有大量的代码和出口相关 尤其是 ...
- elasticsearch中使用runtime fields
1.背景 在我们使用es的开发过程中可能会遇到这么一种情况,比如我们的线路名称字段lineName字段在设置mapping的时候使用的是text类型,但是后期发现需要使用这个字段来进行聚合操作,那么我 ...
- DVWA靶场实战(十二)——XSS(Stored)
DVWA靶场实战(十二) 五.XSS(Stored): 1.漏洞原理: XSS的Stored被称作存储型XSS漏洞,漏洞的原理为语句被保存到服务器上,显示到HTML页面中,经常出现在用户评论的页面,攻 ...