【JAVA正则表达式】
一、String类。
java.lang.Object
|--java.lang.String
常用方法:
|
|
|
|
|
|
|
|
二、Pattern类。
java.lang.Objet
|--java.util.regex.Pattern
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。简单来说,正则表达式在发挥作用之前要先封装为Pattern对象。它和Matcher对象配合发挥作用。
因此,典型的调用顺序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句
boolean b = Pattern.matches("a*b", "aaaaab");
构造方法:无
获取Pattern对象的方法:
|
|
常用方法:
|
|
|
|
|
|
|
|
三.Matcher类。
java.lang.Object
|-java.util.regex.Matcher
构造方法:没有。
获取该类对象的方法:
使用Pattern类的matcher方法。这是获取该类实例的唯一方法
常用方法:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
四、正则表达式功能分类。
1.匹配。
实际上使用的是String类的matches方法。
|
|
需求:验证手机号码格式是否正确。
分析:手机号码应为11位,全部应为数字,第一个数为1,假设第二位数应当为3或5或8
则对应的模式为:1[358][0-9]{9}或者1[358]\d{9}
代码:
private static void checkPhoneNumber() {
String phone="15791916245";
String regex="1[358]\\d{9}";
System.out.println(phone.matches(regex));
}
运行结果为true
2.切割。
实际上使用的是String类的split方法。
|
|
取单词练习。
(1)分隔符为若干个连续的空格。
使用的模式为:" +"
代码:
private static void getDanCi() {
String str="xiao qiang zhaosan lisi";
String regex=" +";
String arr[]=str.split(regex);
for(String s:arr)
System.out.println(s);
}
(2)分隔符为若干个连续的非空格符号,而且分隔符种类不唯一。
使用的模式为:"(.)\\1+"。.在这里代表着任意字符,而不是单纯的.,如果想要使用.切割字符串,则需要转义:\\.;其中使用了小括号代表着分组,后面\\1代表第一组,如果要使用“第一组组号1”而非单纯的数字1,需要使用\\进行转义。
组:((A)(B(C))),谁是第一组,谁是第二组?从左括号开始看并开始计数。
代码:
private static void getDanCi2() {
String str="zhangsan@@@@@lisi#####王五$$$$";
String regex="(.)\\1+";
String arr[]=str.split(regex);
for(String s:arr)
System.out.println(s);
}
3.替换
实际上使用的是String类的replaceAll方法。
|
|
(1).将字符串“zhangsan@@@@@@lisi&&&&&&&wangwu******zhaoliu-------”中的叠词全部变成#。
使用的模式为:"(.)\\1+"
代码:
private static void replaceDemo() {
String str="zhangsan@@@@@@lisi&&&&&&&wangwu******zhaoliu-------";
String regex="(.)\\1+";
str=str.replaceAll(regex, "#");
System.out.println(str);
}
运行结果:zhangsan#lisi#wangwu#zhaoliu#
(2).将字符串“zhangsan@@@@@@lisi&&&&&&&wangwu******zhaoliu-------”中的叠词全部变成原来叠词中的单一符号。
使用的模式:同1,但是在调用repalaceAll方法的时候,第二个参数使用$1,使用$符号可以在后一个参数中使用第一个参数中的组,后面的数字代表组号。
代码:
private static void replaceDemo2() {
String str="zhangsan@@@@@@lisi&&&&&&&wangwu******zhaoliu-------";
String regex="(.)\\1+";
str=str.replaceAll(regex, "$1");
System.out.println(str);
}
运行结果:zhangsan@lisi&wangwu*zhaoliu-
(3).屏蔽掉号码中的某几位数字并且以*号代替原数字。
比如:比如:18369905102变成183*****102
使用的模式:"(\\d{3})(\\d{4})(\\d{4})"
代码:
private static void replaceDemo3() {
String str="13991716243";
String regex="(\\d{3})(\\d{4})(\\d{4})";
str=str.replaceAll(regex, "$1****$3");
System.out.println(str);
}
运行结果:139****6243
4.获取。
正则表达式的获取功能只能使用Pattern 类与Matcher类实现,其余均不能实现该功能。
主要使用到的方法是Matcher类的
|
|
|
|
|
两个方法。
练习:
获取"da jia hao,ming tian bu fang jia !"中由三个字母组成的单词。
使用的模式为:"\\b[a-zA-Z]{3}\\b",\b是单词边界
代码:
private static void getDemo1() {
List<String>list=new ArrayList<String>();
String str="da jia hao,ming tian bu fang jia !";
String regex="\\b[a-zA-Z]{3}\\b";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
while(m.find())
{
list.add(m.group());
}
for(String s:list)
System.out.println(s);
}
运行结果:
jia
hao
jia
应当注意,如果使用了start方法与end方法,则输出为:
3:6
7:10
29:32
jia
hao
jia
start()是开始索引号,从0开始,end()是结束索引号,包含头不包含尾。
【JAVA正则表达式】的更多相关文章
- java正则表达式
java正则表达式 1.Java正则表达式的语法与示例: http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式: http://www.runo ...
- Java正则表达式入门——转自RUNOOB.COM
Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...
- Java 正则表达式详解
Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...
- 【转】详解Java正则表达式语法
(转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...
- java正则表达式【大全】
[正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$& ...
- JAVA正则表达式:Pattern类与Matcher类详解(转)
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- JAVA正则表达式:Pattern类与Matcher类详解
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- Java 正则表达式[转载]
PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...
- Java正则表达式的应用
在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...
- Java正则表达式实用教程
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.java.util.regex包主要包括以下三个类:Pattern.Matcher和PatternSynta ...
随机推荐
- Python自动化之多进程
多进程multiprocessing from multiprocessing import Process import os def info(title): print(title) print ...
- [NOIP2015] 子串substring 题解
[题目描述] 有两个仅包含小写英文字母的字符串A和B.现在要从字符串A中取出k个互不重叠的非空子串,然后把这k个子串按照其在字符串A中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得 ...
- Android 手势水平监听判断
package com.zihao.ui; import com.zihao.R; import android.os.Bundle; import android.app.Activity; imp ...
- Hibernate中的GetCurrentSession()方法
从3.0.1版本开 始,Hibernate增加了SessionFactory.getCurrentSession()方法. 采用getCurrentSession()创建的session在commit ...
- JavaScript工作原理和Node异步I/O
1. 什么是JavaScript解析引擎? 简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序.比如var a=1+2:对于静态语言来说 ...
- 【leetcode】Word Break II
Word Break II Given a string s and a dictionary of words dict, add spaces in s to construct a senten ...
- Javascript 面向对象
面向对象语言的标识:类的概念. ECMAScript中没有类的概念,因此他的对象与基于类的语言中的对象有所不同. ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值.对象.函数.我们可 ...
- 压测 apache ab 初探
2015年10月30日 14:58:34 ab是apache自带的压测命令, 在其bin目录下边, 不仅可以压测Apache, 也可以测nginx或其他服务器 可以模拟上传post值 (-p, 与下边 ...
- MySQL thread pool【转】
本文来自:http://blog.chinaunix.net/uid-26896862-id-3993773.html 刚刚经历了淘宝的双11,真实感受到了紧张的氛围.尽管DB淡定的度过,但是历程中的 ...
- Lock+Condition 相对于 wait+notify 的一个优势案例分析
问题的描述 启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18, ...