一、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. 2.2---找链表倒数第K个结点

    答案,注意,一种是递归,另一种是迭代,那么巧妙利用双指针: 迭代: public static LinkedListNode nthToLast(LinkedListNode head, int n) ...

  2. TIMIT语音库

    TIMIT语音库有着准确的音素标注,因此可以应用于语音分割性能评价,同时该数据库又含有几百个说话人语音,所以也是评价说话人识别常用的权威语音库,但该语音库的商业用途是要花钱买的.下面的资源来自与MIT ...

  3. 解读Unity中的CG编写Shader系列七(不透明度与混合)

    转自http://www.itnose.net/detail/6098539.html 1.不透明度 当我们要将两个半透的纹理贴图到一个材质球上的时候就遇到混合的问题,由于前面的知识我们已经知道了片段 ...

  4. GNOME启动时激活NumLock(小键盘数字锁定)

    首先下载numlockx官方源提供的安装包,解压后进入目录运行终端,切换到root账户执行以下命令: python ./setup.py 然后依次点击GNOME菜单项上的“系统->首选项-> ...

  5. ABAP 内表的行列转换-发货通知单-打印到Excel里

    需要传入数据到Excel里的模板如上图所示 ********************** *           设计主要逻辑与原理说明                                 ...

  6. String.prototype.substr()

    概述 substr() 方法返回字符串中从指定位置开始到指定长度的子字符串. 语法 str.substr(start[, length]) 参数 start 开始提取字符的位置.如果为负值,则被看作  ...

  7. WPS文字在表格中打字自动跳动

    可以设置表格的属性来实现. 1.选择表格,点击鼠标右键,选择“表格属性” 2.在出现的对话框中,文字环绕选择“无”,“行”的设置为“允许跨页断行”,就可以了.

  8. 【HTTP】Wireshark过滤规则

    参考:http://jingyan.baidu.com/article/454316ab593170f7a6c03a60.html 语句特点:协议.属性 一.IP过滤: 包括来源IP或者目标IP等于某 ...

  9. poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化

    题目链接 题意:有n个猫,开始的时候每个猫都没有坚果,进行k次操作,g x表示给第x个猫一个坚果,e x表示第x个猫吃掉所有坚果,s x y表示第x个猫和第y个猫交换所有坚果,将k次操作重复进行m轮, ...

  10. oc获得相册照片

    - (void)addImage { if (CGRectGetMaxX(addImageView.frame)>SCREEN_WIDTH-CGRectGetWidth(addImageView ...