一、String类。

java.lang.Object

  |--java.lang.String

常用方法:

 String

replaceAll(String regex, String replacement)
          使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

 String[]

split(String regex)
          
根据给定正则表达式的匹配拆分此字符串。

 boolean

matches(String regex)
          
告知此字符串是否匹配给定的正则表达式

二、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对象的方法:

static Pattern

compile(String regex)
          
将给定的正则表达式编译到模式中。

常用方法:

 Matcher

matcher(CharSequence input)
          创建匹配给定输入与此模式的匹配器。

static boolean

matches(String regex, CharSequence input)
          
编译给定正则表达式并尝试将给定输入与其匹配。该方法为Pattern类的静态方法,不需要获得Pattern类实例即可使用。

 String

pattern()
          
返回在其中编译过此模式的正则表达式。

三.Matcher类。

java.lang.Object

  |-java.util.regex.Matcher

构造方法:没有。

获取该类对象的方法:

使用Pattern类的matcher方法。这是获取该类实例的唯一方法

常用方法:

 int

end()
          返回最后匹配字符之后的偏移量。

boolean

find()
          
尝试查找与该模式匹配的输入序列的下一个子序列。

 String

group()
          
返回由以前匹配操作所匹配的输入子序列。

boolean

matches()
          
尝试将整个区域与模式匹配。

 String

replaceAll(String replacement)
          
替换模式与给定替换字符串相匹配的输入序列的每个子序列。

 int

start()
          
返回以前匹配的初始索引。

四、正则表达式功能分类。

1.匹配。

实际上使用的是String类的matches方法。

 boolean

matches(String regex)
          
告知此字符串是否匹配给定的正则表达式

需求:验证手机号码格式是否正确。

分析:手机号码应为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方法。

 String[]

split(String regex)
          
根据给定正则表达式的匹配拆分此字符串。

取单词练习。

(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方法。

 String

replaceAll(String regex, String replacement)
          
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

(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类的

boolean

find()
          尝试查找与该模式匹配的输入序列的下一个子序列。

 String

group()
          
返回由以前匹配操作所匹配的输入子序列。

两个方法。

练习:

获取"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正则表达式】的更多相关文章

  1. java正则表达式

    java正则表达式 1.Java正则表达式的语法与示例:  http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式:  http://www.runo ...

  2. Java正则表达式入门——转自RUNOOB.COM

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  3. Java 正则表达式详解

    Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...

  4. 【转】详解Java正则表达式语法

    (转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...

  5. java正则表达式【大全】

    [正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$& ...

  6. JAVA正则表达式:Pattern类与Matcher类详解(转)

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  7. JAVA正则表达式:Pattern类与Matcher类详解

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  8. Java 正则表达式[转载]

    PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...

  9. Java正则表达式的应用

    在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...

  10. Java正则表达式实用教程

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.java.util.regex包主要包括以下三个类:Pattern.Matcher和PatternSynta ...

随机推荐

  1. Codeforces Gym 100114 D. Selection

    Description 问选择一个序列上的所有数的最少操作次数,跟电脑上选择文件一样,输出操作方案. Sol 贪心. 用Shift一段文件只能使用一次,之后必须一直按Ctrl了. 然后就是看用Shif ...

  2. How to tile small texture image onto page as its background

    You don’t need to set a big size image as the background of pages if the image is texture or uniform ...

  3. 基于HTK语音工具包进行孤立词识别的使用教程

    选自:http://my.oschina.net/jamesju/blog/116151 1前言 最近一直在研究HTK语音识别工具包,前几天完成了工具包的安装编译和测试,这几天又按耐不住好奇,决定自己 ...

  4. 音频DAC剖析---解开HI-FI音质的秘密

    选自:http://mp3.zol.com.cn/54/547689.html 无论我们是买MP3.MP4也好,实际上我们的数码播放器最经常使用的就是音乐播放功能,所以数码播放器的音质,一直是消费者的 ...

  5. phpcms评论的url替换问题

    在整个项目改ip之前,评论里的url是127.0.1.113 改成localhost之后,更新了所有的url和缓存,但是v9_comment表中的url字段没有更新. 想一下后台只有一个地方是替换数据 ...

  6. 数据库视图 (View)和EntityFramework Code First结合使用

    问题来源: 项目需要进行查询操作,会涉及多表间的联合查询,使用Entity Framework会牵涉到效率问题,为增加查询速度,所以使用数据库视图技术,综合来讲是将Model类映射到数据库View. ...

  7. oracle,mybatis主键自增长

    <insert id="insert" parameterType="resource"> <selectKey resultType=&qu ...

  8. ios 引入第三方库 运行时找不到函数实现

    今天引入webtrends 这个库,结果一直运行时找不到函数,纳闷了一下午! 后来发现,是other flag没有设置对,对于那些包含category用来扩展ios原始类型的库,链接的时候需要特别的链 ...

  9. ios Tabbar Item 的图标

    1,tabBarItem图片的推荐尺寸和最大支持尺寸 下面是标签栏(UITabBar)中tab按钮图标分别在1x.2x.3x下不会压缩变形的尺寸: @1x : 推荐 25 x 25   (最大: 48 ...

  10. [转]finished with non-zero exit value 2

    Error:Execution failed for task ':phoneacompany:dexDebug'. > com.android.ide.common.process.Proce ...