https://www.cnblogs.com/dongh/p/9667884.html
正则表达式网站:http://www.qilin668.com/q/5dfdf3839d948xc.html

正则规则

【单个】字符匹配

  1. 任意字符:表示由任意字符组成
  2. \\:匹配一个‘\’
  3. \n:匹配换行
  4. \t:匹配制表符

    【单个】字符集(可以从里面任选一个字符)

  5. [abc]:可以是字母abc中任意一个

  6. [^abc]:非字母abc中的任意一个
  7. [a-zA-Z]:一个任意字母,不区分大小写
  8. [0-9]:一位任意数字

    【单个】简化字符集

  9. .:一个任意字符,\n 除外

  10. \d:一个数字字符,等价于[0-9]
  11. \D:一个非数字字符,等价于[^0-9]
  12. \s:匹配任意的一位空格,可能是空格、换行、 制表符等,等价于[\f\n\r\t\v]
  13. \S:匹配任意的非空格数据,等价于[^\f\n\r\t\v]
  14. \n:匹配一个换行符
  15. \r:匹配一个回车符
  16. \t:匹配一个制表符
  17. \f:匹配一个换页符
  18. \v:匹配一个垂直制表符。等价于\x0b\cK
  19. \w:匹配字母、数字、下划线,等价于[a-zA-Z_0-9]
  20. \W:匹配非字母、数字、下划线,等价于[^a-zA-Z_0-9]

.表示任意字符,\\. 才代表一个点 .

边界匹配

  1. ^:匹配边界开始
  2. $:匹配边界结束
  3. \b:匹配一个单词边界,也就是指单词和空格间的位置。
  4. \B:匹配非单词边界。

    数量表示,默认情况下只有添加上了数量单位才可以匹配多位字符

  5. 表达式?:该正则可以出现0次或1次

  6. 表达式*:该正则可以出现0次、1次或多次
  7. 表达式+:该正则可以出现1次或多次
  8. 表达式{n}:表达式的长度正好为n次
  9. 表达式{n,}:表达式的长度为 n次以上
  10. 表达式{n,m}:表达式的长度为n~m次;

    ? 的更多解释: 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串。而默认的贪婪模式则尽可能多的匹配所搜索的字符串。 例如,对于字符串 “oooo”,”o+?” 将匹配单个 “o”,而 “o+” 将匹配所有 “o”。

逻辑表达式:可以连接多个正则

  1. 表达式X表达式Y:X表达式之后紧跟上Y表达式
  2. 表达式X|表达式Y:有一个表达式满足即可
  3. {表达式}:为表达式设置一个整体描述,可以为整体描述设置数量单位
  4. (pattern):匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在 Java 中则使用 $0…$9 属性。要匹配圆括号字符,请使用“(”或“)”。

    Java 正则表达式的运用

    1. 字符串的替换

    public String replaceAll(String regex, String replacement)
  • 参数1:一个正则表达式
  • 参数2:替换正则表达式匹配到的内容

示例:手机号邮箱脱敏

  1. public static String paddingPhone(String phone) {
  2. if (StringUtils.isBlank(phone)) {
  3. return phone;
  4. }
  5. return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
  6. }
  7. public static String paddingEmail(String email) {
  8. if (StringUtils.isBlank(email)) {
  9. return email;
  10. }
  11. return email.replaceAll("(\\w{3})(\\w+)(\\w{3})(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4");
  12. }

参数 1 匹配了一个手机或邮箱格式的字符串,而 replaceAll 的第二个参数中的 $ 表示正则中的子串序列,简单来说就代表了一个正则的小括号匹配到的内容,数字代表序号。

2. 正则匹配

  1. Pattern pattern = Pattern.compile("\\\\regex\\\\");
  2. pattern.matchers("\\regex\\");

常用正则匹配

https://mp.weixin.qq.com/s/Y3ZS7Asj5GgxJmF0VUsmvw

数字匹配

  1. 数字:^[0-9]*$
  2. n位的数字:^\d{n}$
  3. 匹配非负整数(正整数 + 0): ^\d+$
  4. 匹配正整数 : ^[0-9]*[1-9][0-9]*$
  5. 匹配非正整数(负整数 + 0): ^((-\d+)|(0+))$
  6. 匹配负整数:^-[0-9]*[1-9][0-9]*$
  7. 匹配整数: ^-?\d+$
  8. 匹配非负浮点数(正浮点数 + 0): ^\d+(\.\d+)?$
  9. 匹配正浮点数: ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
  10. 匹配非正浮点数(负浮点数 + 0): ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
  11. 匹配负浮点数: ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
  12. 匹配浮点数 : ^(-?\d+)(\.\d+)?$

    字符匹配

  13. 汉字:^[\u4e00-\u9fa5]{0,}$

  14. 匹配由26个英文字母组成的字符串^[A-Za-z]+$
  15. 匹配由26个英文字母的大写组成的字符串 : ^[A-Z]+$
  16. 匹配由26个英文字母的小写组成的字符串: ^[a-z]+$
  17. 匹配由数字和26个英文字母组成的字符串: ^[A-Za-z0-9]+$
  18. 匹配由数字、26个英文字母或者下划线组成的字符串: ^\w+$
  19. 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
  20. 匹配双字节字符(包括汉字在内):[^\x00-\xff]
  21. 匹配空行的正则表达式:\n[\s| ]*\r
  22. 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
  23. 匹配首尾空格的正则表达式:(^\s*)|(\s*$)

    特殊字符串

  24. 中国身份证:(^\d{15}$)|(\d{17}(?:\d|x|X)$)

  25. 邮箱:^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$
  26. 手机号码:^(1(([35][0-9])|(47)|[8][01236789]))\d{8}$
  27. 手机号码电话号码同时验证(^\(?\d{3,4}[\)\-]?\d{5,10}$)|(^\[1358]d{10}$)
  28. 实现手机号前带86或是+86的情况:^((\+86)|(86))?(13)\d{9}$
  29. 电话号码与手机号码同时验证:(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})
  30. 网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
  31. 图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
  32. 中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
  33. 中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
  34. 中国邮政编码:[1-9]{1}(\d+){5}
  35. 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  36. ip地址:^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$
  37. 简单的日期判断(YYYY/MM/DD):^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$
  38. 演化的日期判断(YYYY/MM/DD| YY/MM/DD): ^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$
  39. 时间yyyy-MM-dd HH:MM:SS :^[1-9][0-9]{3}-(0?[1-9]|1[0|1|2])-(0?[1-9]|[1|2][0-9]|3[0|1]) (0?[1-9]|1[0-9]|2[0-3]):(0?[0-9]|[1|2|3|4|5][0-9]):(0?[0-9]|[1|2|3|4|5][0-9])$
  40. 匹配网址URL的正则表达式:((http|ftp|https|file):\/\/([\w\-]+\.)+[\w\-]+(\/[\w\u4e00-\u9fa5\-\.\/?\@\%\!\&=\+\~\:\#\;\,]*)?)
  41. 匹配多级域名+端口 https:domain:port:https://[a-zA-Z\\d-]+(\\.[a-zA-Z\\d-]+)+:([1-9]|[1-5]\\d{4}|6[1-4]\\d{3}|65[1-4]\\d{2}|655[1-2]\\d|6553[1-5])