https://www.cnblogs.com/dongh/p/9667884.html
正则表达式网站:http://www.qilin668.com/q/5dfdf3839d948xc.html
正则规则
【单个】字符匹配
任意字符
:表示由任意字符组成\\
:匹配一个‘\’\n
:匹配换行-
【单个】字符集(可以从里面任选一个字符)
[abc]
:可以是字母abc中任意一个[^abc]
:非字母abc中的任意一个[a-zA-Z]
:一个任意字母,不区分大小写-
【单个】简化字符集
.
:一个任意字符,\n
除外\d
:一个数字字符,等价于[0-9]
\D
:一个非数字字符,等价于[^0-9]
\s
:匹配任意的一位空格,可能是空格、换行、 制表符等,等价于[\f\n\r\t\v]
\S
:匹配任意的非空格数据,等价于[^\f\n\r\t\v]
\n
:匹配一个换行符\r
:匹配一个回车符\t
:匹配一个制表符\f
:匹配一个换页符\v
:匹配一个垂直制表符。等价于\x0b
和\cK
。\w
:匹配字母、数字、下划线,等价于[a-zA-Z_0-9]
\W
:匹配非字母、数字、下划线,等价于[^a-zA-Z_0-9]
边界匹配
^
:匹配边界开始$
:匹配边界结束\b
:匹配一个单词边界,也就是指单词和空格间的位置。-
数量表示,默认情况下只有添加上了数量单位才可以匹配多位字符
表达式?
:该正则可以出现0次或1次表达式*
:该正则可以出现0次、1次或多次表达式+
:该正则可以出现1次或多次表达式{n}
:表达式的长度正好为n次表达式{n,}
:表达式的长度为 n次以上表达式{n,m}
:表达式的长度为n~m次;?
的更多解释: 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串。而默认的贪婪模式则尽可能多的匹配所搜索的字符串。 例如,对于字符串 “oooo”,”o+?” 将匹配单个 “o”,而 “o+” 将匹配所有 “o”。
逻辑表达式:可以连接多个正则
表达式X表达式Y
:X表达式之后紧跟上Y表达式表达式X|表达式Y
:有一个表达式满足即可{表达式}
:为表达式设置一个整体描述,可以为整体描述设置数量单位(pattern)
:匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在 Java 中则使用 $0…$9 属性。要匹配圆括号字符,请使用“(”或“)”。Java 正则表达式的运用
1. 字符串的替换
public String replaceAll(String regex, String replacement)
- 参数1:一个正则表达式
- 参数2:替换正则表达式匹配到的内容
示例:手机号邮箱脱敏
public static String paddingPhone(String phone) {
if (StringUtils.isBlank(phone)) {
return phone;
}
return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
public static String paddingEmail(String email) {
if (StringUtils.isBlank(email)) {
return email;
}
return email.replaceAll("(\\w{3})(\\w+)(\\w{3})(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4");
}
参数 1 匹配了一个手机或邮箱格式的字符串,而 replaceAll 的第二个参数中的 $ 表示正则中的子串序列,简单来说就代表了一个正则的小括号匹配到的内容,数字代表序号。
2. 正则匹配
Pattern pattern = Pattern.compile("\\\\regex\\\\");
pattern.matchers("\\regex\\");
常用正则匹配
https://mp.weixin.qq.com/s/Y3ZS7Asj5GgxJmF0VUsmvw
数字匹配
- 数字:
^[0-9]*$
- n位的数字:
^\d{n}$
- 匹配非负整数(正整数 + 0):
^\d+$
- 匹配正整数 :
^[0-9]*[1-9][0-9]*$
- 匹配非正整数(负整数 + 0):
^((-\d+)|(0+))$
- 匹配负整数:
^-[0-9]*[1-9][0-9]*$
- 匹配整数:
^-?\d+$
- 匹配非负浮点数(正浮点数 + 0):
^\d+(\.\d+)?$
- 匹配正浮点数:
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
- 匹配非正浮点数(负浮点数 + 0):
^((-\d+(\.\d+)?)|(0+(\.0+)?))$
- 匹配负浮点数:
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
-
字符匹配
汉字:
^[\u4e00-\u9fa5]{0,}$
- 匹配由26个英文字母组成的字符串
^[A-Za-z]+$
- 匹配由26个英文字母的大写组成的字符串 :
^[A-Z]+$
- 匹配由26个英文字母的小写组成的字符串:
^[a-z]+$
- 匹配由数字和26个英文字母组成的字符串:
^[A-Za-z0-9]+$
- 匹配由数字、26个英文字母或者下划线组成的字符串:
^\w+$
- 匹配中文字符的正则表达式:
[\u4e00-\u9fa5]
- 匹配双字节字符(包括汉字在内):
[^\x00-\xff]
- 匹配空行的正则表达式:
\n[\s| ]*\r
- 匹配HTML标记的正则表达式:
/<(.*)>.*<\/\1>|<(.*) \/>/
-
特殊字符串
中国身份证:
(^\d{15}$)|(\d{17}(?:\d|x|X)$)
- 邮箱:
^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$
- 手机号码:
^(1(([35][0-9])|(47)|[8][01236789]))\d{8}$
- 手机号码电话号码同时验证
(^\(?\d{3,4}[\)\-]?\d{5,10}$)|(^\[1358]d{10}$)
- 实现手机号前带86或是+86的情况:
^((\+86)|(86))?(13)\d{9}$
- 电话号码与手机号码同时验证:
(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})
- 网络链接:
(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
- 图片链接:
(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
- 中国固定电话号码:
(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
- 中国电话号码(包括移动和固定电话):
(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
- 中国邮政编码:
[1-9]{1}(\d+){5}
- 域名:
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
- 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])$
- 简单的日期判断(YYYY/MM/DD):
^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$
- 演化的日期判断(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}日$)$
- 时间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])$
- 匹配网址URL的正则表达式:
((http|ftp|https|file):\/\/([\w\-]+\.)+[\w\-]+(\/[\w\u4e00-\u9fa5\-\.\/?\@\%\!\&=\+\~\:\#\;\,]*)?)
- 匹配多级域名+端口 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])