【JAVA正则表达式】

一、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}

代码:

1 private static void checkPhoneNumber() {
2         String phone="15791916245";
3         String regex="1[358]\\d{9}";
4         System.out.println(phone.matches(regex));
5     }

运行结果为true

2.切割。

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


 String[]


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

取单词练习。

(1)分隔符为若干个连续的空格。

使用的模式为:" +"

代码:

1 private static void getDanCi() {
2         String str="xiao  qiang      zhaosan       lisi";
3         String regex=" +";
4         String arr[]=str.split(regex);
5         for(String s:arr)
6             System.out.println(s);
7     }

(2)分隔符为若干个连续的非空格符号,而且分隔符种类不唯一。

使用的模式为:"(.)\\1+"。.在这里代表着任意字符,而不是单纯的.,如果想要使用.切割字符串,则需要转义:\\.;其中使用了小括号代表着分组,后面\\1代表第一组,如果要使用“第一组组号1”而非单纯的数字1,需要使用\\进行转义。

组:((A)(B(C))),谁是第一组,谁是第二组?从左括号开始看并开始计数。

代码:

1 private static void getDanCi2() {
2         String str="zhangs[email protected]@@@@lisi#####王五$$$$";
3         String regex="(.)\\1+";
4         String arr[]=str.split(regex);
5         for(String s:arr)
6             System.out.println(s);
7     }

3.替换

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


 String


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

(1).将字符串“[email protected]@@@@@lisi&&&&&&&wangwu******zhaoliu-------”中的叠词全部变成#。

使用的模式为:"(.)\\1+"

代码:

1 private static void replaceDemo() {
2         String str="[email protected]@@@@@lisi&&&&&&&wangwu******zhaoliu-------";
3         String regex="(.)\\1+";
4         str=str.replaceAll(regex, "#");
5         System.out.println(str);
6     }

运行结果:zhangsan#lisi#wangwu#zhaoliu#

(2).将字符串“[email protected]@@@@@lisi&&&&&&&wangwu******zhaoliu-------”中的叠词全部变成原来叠词中的单一符号。

使用的模式:同1,但是在调用repalaceAll方法的时候,第二个参数使用$1,使用$符号可以在后一个参数中使用第一个参数中的组,后面的数字代表组号。

代码:

1     private static void replaceDemo2() {
2         String str="[email protected]@@@@@lisi&&&&&&&wangwu******zhaoliu-------";
3         String regex="(.)\\1+";
4         str=str.replaceAll(regex, "$1");
5         System.out.println(str);
6     }

运行结果:[email protected]&wangwu*zhaoliu-

(3).屏蔽掉号码中的某几位数字并且以*号代替原数字。

比如:比如:18369905102变成183*****102

使用的模式:"(\\d{3})(\\d{4})(\\d{4})"

代码:

1 private static void replaceDemo3() {
2         String str="13991716243";
3         String regex="(\\d{3})(\\d{4})(\\d{4})";
4         str=str.replaceAll(regex, "$1****$3");
5         System.out.println(str);
6     }

运行结果: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是单词边界

代码:

 1 private static void getDemo1() {
 2         List<String>list=new ArrayList<String>();
 3         String str="da jia hao,ming tian bu fang jia !";
 4         String regex="\\b[a-zA-Z]{3}\\b";
 5         Pattern p=Pattern.compile(regex);
 6         Matcher m=p.matcher(str);
 7         while(m.find())
 8         {
 9             list.add(m.group());
10         }
11         for(String s:list)
12             System.out.println(s);
13     }

运行结果:

jia
hao
jia

应当注意,如果使用了start方法与end方法,则输出为:

3:6
7:10
29:32
jia
hao
jia

start()是开始索引号,从0开始,end()是结束索引号,包含头不包含尾。

时间: 2024-10-25 22:01:50

【JAVA正则表达式】的相关文章

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

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

Java正则表达式教程及示例

本文由 ImportNew - ImportNew读者 翻译自 journaldev.欢迎加入翻译小组.转载请见文末要求. [感谢 @CuGBabyBeaR  的热心翻译.如果其他朋友也有不错的原创或译文,可以尝试投递到 ImportNew.] 当我开始我的Java职业生涯的时候,对于我来说正则表达式简直是个是梦魇.本教程旨在帮助你驾驭Java正则表达式,同时也帮助我复习正则表达式. 什么是正则表达式? 正则表达式定义了字符串的模式.正则表达式可以用来搜索.编辑或处理文本.正则表达式并不仅限于某

JAVA 正则表达式 (超详细)

(PS:这篇文章为转载,我不喜欢转载的但我觉得这篇文章实在是超赞了,就转了过来,这篇可以说是学习JAVA正则表达的必读篇.作者是个正真有功力的人,阅读愉快) 在Sun的JavaJDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式.正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性.在Unix世界里,正则表达式几乎没有

Java 正则表达式(精华)

英文:Jakob Jenkov译文:严亮链接:ifeve.com/java-regex/ Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索出现的模式.例如,你可以用正则表达式搜索网页中的邮箱地址或超链接. 正则表达式示例 下面是一个简单的Java正则表达式的例子,用于在文本中搜索 http:// String text = "This is th

java正则表达式

在做 Crawler的时候,本来是准备用正则的,但是看jsoup很好用,就没有学,刚刚在做古诗提取的时候,又要用到正则表达式,还是学了算了. 说明: 文章重点参考的http://www.cnblogs.com/ggjucheng/p/3423731.html,加上自己有一点理解. 正则表达式的语法可以参考: http://www.runoob.com/regexp/regexp-syntax.html java正则表达式主要是关于java.util.regex中的两个类: 1.Pattern:正

Java正则表达式入门

众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 大 家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.  自从jdk1.4

Java正则表达式初学

之前一直觉得正则表达式很NB,几乎各种类型的字符串都能够通过正则来进行匹配,抱着这种心态开始regular expressions的学习. 总的来讲,regular expressions的语法还是比较简单的,总共也没有多少. 下面先列举regular expressions的字符介绍,最后再通过实例加深对regular expressions的理解. 内容参考:http://www.cnblogs.com/elleniou/archive/2012/07/31/2617312.html 正则表

常用的java正则表达式

正则表达式是编程中的一个难点和重点,下面就列举一些JAVA中常用的正则表达式大全.供大家共同学习. 1 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 2 只能输入数字:"^[0-9]*$". 3 只能输入n位的数字:"^\d{n}$". 4 只能输入至少n位的数字:"^\d{n,}$". 5 只能输入m~n位的数字:."^\d{m,n}$" 6 只能输入零和非零开头的数字:"^(0|[1-9][0

JAVA正则表达式语法大全

[正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数字:"^\d{n,}$".只能输入m~n位的数字:."^\d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$".只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})

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

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作