正则表达式

转自:https://blog.csdn.net/hansion3333/article/details/79133343

一、正则表达式

        (Regular Expression,代码中常简写为regex、regexp或RE)
        又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。



二、常用元字符

.匹配除换行符 \n 之外的任何单字符
\w 匹配任意字母、数字或下划线
\s匹配任意的空白符,包括空格、制表符、换页符等等,等价于 [ \f\n\r\t\v]
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\d匹配数字字符,等价于[0-9]
\D 匹配非数字字符,等价于[^0-9]
^放在正则的最开始位置,就代表起始的意思,放在中括号里,表示排除的意思
匹配字符串的结束


三、括号、中括号、大括号


()分组,表达式中用了几个括号,就分几个组。匹配后可通过Matcher.group(int group)获取相应的匹配字符串
group(0)就是指的整个串,group(1)指的是第一个括号里的东西,group(2)指的第二个括号里的东西
[]定义匹配的字符范围,可以理解为,只要满足括号里面其中的某种条件即可,如[\s*]表示空格或者*号
{}一般用来表示匹配的长度,如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配一到三个空格


四、常用限定符


{n}匹配确定的 n 次,    n 是一个非负整数
{n,}至少匹配n 次,n 是一个非负整数
{n,m}最少匹配 n 次且最多匹配 m 次,m 和 n 均为非负整数,其中n <= m
*匹配前面的子表达式零次或多次,等价于{0,}
+匹配前面的子表达式一次或多次,等价于 {1,}
匹配前面的子表达式零次或一次,等价于 {0,1}


五、在Java中使用正则表达式

1.常规写法:

[java] view plain copy
  1. Pattern pattern = Pattern.compile("正则表达式语句");  
  2. Matcher isNum = pattern.matcher("需要匹配的字符串");  
可以利用获得的Matcher对象对匹配后的字符串进行按需处理


2.仅获取匹配的结果的写法:
         String类中将上述写法封装成一个String.matches(String regex)方法:

[java] view plain copy
  1. "需要匹配的字符串".matches("正则表达式语句");  
        返回值为boolean类型,代表是否匹配



3.Pattern类常用方法


[java] view plain copy
  1. static Pattern compile(String regex)    将给定的正则表达式编译并赋予给Pattern类  
  2. Matcher matcher(CharSequence input)     生成Matcher对象  


4.Matcher类常用方法

[java] view plain copy
  1. boolean matches()   是否匹配  
  2. String replaceAll(String replacement)   将目标字符串里与表达式相匹配的子串全部替换为指定的字符串  
  3. String group(int group)     返回当前查找而获得的与指定的组匹配的子串内容  



六、小练习

1.是否是月份:0-9、01-09、10-12

[java] view plain copy
  1. /** 
  2.  * 是否是月份,0-9、01-09、10-12 
  3.  * @param month 待匹配字符串 
  4.  * @return  是否匹配 
  5.  */  
  6. public boolean isMonth(String month) {  
  7.     return month.matches("0?[1-9]|1[0-2]");  
  8. }  
表达式解读:
            0?[1-9]|1[0-2]
            十位是0可能出现一次或零次,个位1-9其中的一个数,即01-09或1-9;
            或者十位是1,个位是0-2其中的一个数,即10-12


2.获取字符串中的数字

[java] view plain copy
  1. /** 
  2.  * 获取字符串中的数字。如03a02,获得0302 
  3.  * @param str 待匹配字符串 
  4.  * @return 字符串中的数字 
  5.  */  
  6. public int  onlyGetNum(String str) {  
  7.     String regEx="\\D";  
  8.     Pattern p = Pattern.compile(regEx);  
  9.     Matcher m = p.matcher(str);  
  10.     String num = m.replaceAll("").trim();  
  11.     return Integer.parseInt(num);  
  12. }  

表达式解读:
            \D 等价于 [^0-9] 匹配非数字字符
思路解读:
            获取到所有非数字的字符,将其去掉(通过Matcher的replaceAll方法将匹配到的字符替换为"",再通过trim方法去掉""),
            最后转换成int返回


3.是否是国内座机号码


[java] view plain copy
  1. /** 
  2.  * 是否是国内座机号码 如:0511-4405222、021-87888822 
  3.  * @param number 待匹配字符串 
  4.  * @return 匹配结果 
  5.  */  
  6. public boolean isTelephonenNumber(String number) {  
  7.     return number.matches("\\d{3}-\\d{8}|\\d{4}-\\d{7}");  
  8. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值