正则表达式Regex
Posted littlemike
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式Regex相关的知识,希望对你有一定的参考价值。
挺惭愧的,学Java这么久了一直没有去学regex,所以就去学了一下(以下都是已转义为Java字符串的regex)
1. "."匹配任意字符
2. "\d"匹配数字0-9; "\D"可以匹配任意非数字字符
3. w的意思是word,"\w"匹配一个字母(a-z,大小写都可)、数字(0-9) 或下划线(_);"\W"则匹配"\w"匹配不到的字符
4. "\s"匹配一个空格字符(blankspace或者 都是空格字符);"\S"则匹配"\s"匹配不到的字符
5. 多数量匹配:"*"匹配任意个字符,包括零个字符,如"\d*"可匹配"8", "808";"+"匹配至少一个字符,如"\d+"可匹配"80", 不可匹配"8";"?"匹配0个或1个字符,如"\d?"可匹配"8"和"80",无法匹配"808"
6. 如果要指定数量匹配:"{n}"匹配指定数量个字符,如"\d{3}"可匹配"888";"{n,m}"匹配指定数量范围个字符,如"\d{5,7}"可匹配"80808", "808080", "8080808"
7. "[...]"可以匹配范围内的字符,例如"[2-8]"可以匹配"2-8";"[...]"的排除法是"[^...]",如"[^2-8]{3}"可以匹配"019",不可以匹配"018"
8. 用^表示开头,用$表示结尾,如"^Q\d{3}$"可以匹配"Q468"
9. "|"表示“或”规则,如"learn\s(Java|(C|c)|(P|p)ython)"可以匹配"learn Java"或“learn C”或"learn c"或"learn Python"或"learn python"
10. "()"除了能把一个子规则括起来之外,有个很重要的作用就是分组匹配。现在要把“区号-电话号码”的区号和电话号码分别提取出来:
1 String regexImperfect = "^\d{3,4}-\d{7,8}$"; 2 String regexPerfect = "^(\d{3,4})-(\d{7,8})$"; 3 String phoneNumber = "020-61234567"; 4 Pattern pattern = Pattern.compile(regexPerfect); 5 Matcher matcher = pattern.matcher(phoneNumber); 6 if (matcher.matches()){ 7 String areaCode = matcher.group(1); 8 String number = matcher.group(2); 9 System.out.println(areaCode + " " + number); 10 }
(用matcher.matches()方法比直接用String.matches()方法好,因为String.matches()方法本质上就是调用matcher.matches方法,但是反复调用会创造很多个pattern对象)
以上是关于正则表达式Regex的主要内容,如果未能解决你的问题,请参考以下文章
YouTube Vimeo 视频 ID 来自嵌入代码或来自带有 PHP 正则表达式 RegEx 的 URL