Java语言之正则表达式
白羽 2018-07-09 来源 :网络 阅读 539 评论 0

摘要:本文将带你了解Java语言之正则表达式,希望本文对大家学JAVA有所帮助。




      正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

 

正则表达式功能强大,用于处理复杂的字符串操作。举例如下:

[java] view plain copy
1. public class  TestRegex  
2. {  
3.     public static void main(String[] args)   
4.     {  
5.         checkQQ();  
6.         checkQQ_1();  
7. //      checkTel();   
8.     }     
9.     public static void checkQQ()  
10.     {  
11.         String qq = "123a454";  
12.   
13.         String regex = "[1-9]\\d{4,14}";  
14.   
15.         boolean flag = qq.matches(regex);  
16.         if(flag)  
17.             System.out.println(qq+"...is ok");  
18.         else  
19.             System.out.println(qq+"... 不合法");  
20.   
21.     }  
22.   
23.   
24.     /* 
25.     对QQ号码进行校验 
26.     要求:5~15  0不能开头,只能是数字 
27.      
28.     这种方式,使用了String类中的方法,进行组合完成了需求。但是代码过于复杂。 
29.  
30.     */  
31.   
32.     public static void checkQQ_1()  
33.     {  
34.         String qq = "123a454";  
35.   
36.         int len = qq.length();  
37.   
38.         if(len>=5 && len<=10)  
39.         {  
40.             if(!qq.startsWith("0"))  
41.             {  
42.                   
43.                   
44.                 char[] arr = qq.toCharArray();//123a4  
45.                 boolean flag = true;  
46.                 for(int x=0;x<arr.length; x++)  
47.                 {  
48.                     if(!(arr[x]>='0' && arr[x]<='9'))  
49.                     {  
50.                         flag = false;  
51.                         break;  
52.                     }  
53.                 }  
54.                 if(flag)  
55.                 {  
56.                     System.out.println("qq:"+qq);  
57.                 }  
58.                 else  
59.                 {  
60.                     System.out.println("出现非法字符");     
61.                 }  
62.                   
63.             }  
64.             else  
65.             {  
66.                 System.out.println("不可以0开头");  
67.   
68.             }  
69.         }  
70.         else  
71.         {  
72.             System.out.println("长度错误");  
73.         }  
74.     }  
75. }

由示例可以看出,使用正则表达式确实相当方便。可以大大缩短校验字符串的繁琐程度。只需要定义一个正则表达式就可以实现。

 

正则表达式:符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。
所以学习正则表达式,就是在学习一些特殊符号的使用。

好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。

具体操作功能:

1,匹配:String  matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
2,切割:String split();
3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。

示例如下:

[java] view plain copy

1. public class  RegexDemo  

2. {  

3.     public static void main(String[] args)   

4.     {  

5.         demo();  

6.   

7.         checkTel();  

8.   

9.         splitDemo("zhangsan.lisi.wangwu","\\.");  

10.         splitDemo("c:\\abc\\a.txt","\\\\");  

11.   

12.         splitDemo("erkktyqqquizzzzzo","(.)\\1+");  

13. //按照叠词完成切割。为了可以让规则的结果被重用  

14. //可以将规则封装成一个组。用()完成。组的出现都有编号。  

15. //从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。  

16.   

17.         String str = "wer1389ty1234564uiod234345675f";//将字符串中的数组替换成#。  

18.           

19.         replaceAllDemo(str,"\\d{4,}","#");  

20.   

21.         String str1 = "erkktyqqqquizzzzzo";  //将重叠的字符替换成单个字母。zzzz->z  

22.         replaceAllDemo(str1,"(.)\\1+","$1");  

23.   

24.           

25.     }  

26.   

27.     public static void replaceAllDemo(String str,String reg,String newStr)  

28.     {  

29.         str = str.replaceAll(reg,newStr);  

30.   

31.         System.out.println(str);  

32.     }  

33.   

34.   

35.   

36.     public static void splitDemo(String str,String reg)  

37.     {  

38.           

39.         //String reg = " +";//按照多个空格来进行切割  

40.         String[] arr = str.split(reg);    

41.         System.out.println(arr.length);  

42.         for(String s : arr)  

43.         {  

44.             System.out.println(s);  

45.         }  

46.     }  

47.   

48.     /* 

49.     匹配 

50.     手机号段只有 13xxx 15xxx 18xxxx 

51.  

52.     */  

53.     public static void checkTel()  

54.     {  

55.         String tel = "16900001111";  

56.         String telReg = "1[358]\\d{9}";  

57.         System.out.println(tel.matches(telReg));  

58.     }  

59.   

60.       

61.     public static void demo()  

62.     {  

63.         String str = "b2323456789";  

64.   

65.         String reg = "[a-zA-Z]\\d+";  

66.   

67.         boolean b= str.matches(reg);  

68.         System.out.println(b);  

69.     }  

70.       

71. }  

 



以下是正则表达式的构造摘要:

 

构造

   

匹配

   

字符

   

x

   

字符 x

   

\\

   

反斜线字符

   

\0n

   

带有八进制值 0 的字符 n (0 <= n <= 7)

   

\0nn

   

带有八进制值 0 的字符 nn (0 <= n <= 7)

   

\0mnn

   

带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)

   

\xhh

   

带有十六进制值 0x 的字符 hh

   

\uhhhh

   

带有十六进制值 0x 的字符 hhhh

   

\t

   

制表符 ('\u0009')

   

\n

   

新行(换行)符 ('\u000A')

   

\r

   

回车符 ('\u000D')

   

\f

   

换页符 ('\u000C')

   

\a

   

报警 (bell) 符 ('\u0007')

   

\e

   

转义符 ('\u001B')

   

\cx

   

对应于 x 的控制符

   

字符类

   

[abc]

   

a、b 或 c(简单类)

   

[^abc]

   

任何字符,除了 a、b 或 c(否定)

   

[a-zA-Z]

   

a 到 z 或 A 到 Z,两头的字母包括在内(范围)

   

[a-d[m-p]]

   

a 到 d 或 m 到 p:[a-dm-p](并集)

   

[a-z&&[def]]

   

d、e 或 f(交集)

   

[a-z&&[^bc]]

   

a 到 z,除了 b 和 c:[ad-z](减去)

   

[a-z&&[^m-p]]

   

a 到 z,而非 m 到 p:[a-lq-z](减去)

   

预定义字符类

   

.

   

任何字符(与行结束符可能匹配也可能不匹配)

   

\d

   

数字:[0-9]

   

\D

   

非数字: [^0-9]

   

\s

   

空白字符:[ \t\n\x0B\f\r]

   

\S

   

非空白字符:[^\s]

   

\w

   

单词字符:[a-zA-Z_0-9]

   

\W

   

非单词字符:[^\w]

   

POSIX 字符类(仅 US-ASCII)

   

\p{Lower}

   

小写字母字符:[a-z]

   

\p{Upper}

   

大写字母字符:[A-Z]

   

\p{ASCII}

   

所有 ASCII:[\x00-\x7F]

   

\p{Alpha}

   

字母字符:[\p{Lower}\p{Upper}]

   

\p{Digit}

   

十进制数字:[0-9]

   

\p{Alnum}

   

字母数字字符:[\p{Alpha}\p{Digit}]

   

\p{Punct}

   

标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

   

 

正则表达式的第四个功能:

4、获取:将字符串中的符合规则的子串取出。

 

操作步骤:

1、将正则表达式封装成对象。

2、让正则对象和要操作的字符串相关联。

3、关联后,获取正则匹配引擎。

4、通过引擎对符合规则的子串进行操作,比如取出。

 

举例如下:

[java] view plain copy
1. import java.util.regex.*;  
2.   
3. public class RegexDemo2   
4. {  
5.     public static void main(String[] args)   
6.     {  
7.         getDemo();  
8.     }  
9.     public static void getDemo()  
10.     {  
11.         String str = "ming tian jiu yao fang jia le ,da jia。";  
12.         System.out.println(str);  
13.         String reg = "\\b[a-z]{4}\\b";  
14.   
15.         //将规则封装成对象。  
16.         Pattern p = Pattern.compile(reg);  
17.   
18.         //让正则对象和要作用的字符串相关联。获取匹配器对象。  
19.         Matcher m  = p.matcher(str);  
20.   
21.     //System.out.println(m.matches());//其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。  
22.     //只不过被String的方法封装后,用起来较为简单。但是功能却单一。  
23. //      boolean b = m.find();//将规则作用到字符串上,并进行符合规则的子串查找。  
24. //      System.out.println(b);  
25. //      System.out.println(m.group());//用于获取匹配后结果。  
26.           
27.           
28.         //System.out.println("matches:"+m.matches());  
29.         while(m.find())  
30.         {  
31.             System.out.println(m.group());  
32.             System.out.println(m.start()+"...."+m.end());  
33.         }  
34.     }  
35. }

  

 

Regex正则表达式的四个功能,该如何选择用哪个?

 

思路方式:


1,如果只想知道该字符是对是错,使用匹配。
2,想要将已有的字符串变成另一个字符串,替换。
3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。
4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。

 

 

 



以上就介绍了JAVA的相关知识,希望对JAVA有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言JAVA频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程