正则表达式速查表:https://www.jb51.net/tools/regexsc.htm
java正则语法手册:http://www.runoob.com/java/java-regular-expressions.html
常用正则表达式大全:https://blog.csdn.net/mynamepg/article/details/83091023
正则表达式在线测试 - 站长工具:http://tool.chinaz.com/regex/
正则表达式在线生成工具 - 正则表达式工具 - 脚本之家在线工具:http://tools.jb51.net/regex/create_reg
java正则表达式详解:
Pattern 详解(一):https://blog.csdn.net/liupeifeng3514/article/details/80030360
Pattern 详解(二):https://blog.csdn.net/liupeifeng3514/article/details/80035865
详解Matcher 详解:https://blog.csdn.net/liupeifeng3514/article/details/80043311
java 正则工具类RegexUtil:https://blog.csdn.net/mynamepg/article/details/83182359
java正则Matcher.matches()、Matcher.lookingAt()、Matcher.find()、 group()详解:
https://blog.csdn.net/mynamepg/article/details/83181945
正则表达式真的很骚,可惜你不会写!:
https://mp.weixin.qq.com/s/gMA8xnUhhrIrcUmV8wrvkQ或https://blog.csdn.net/mynamepg/article/details/83109714
正则表达式(Java版整理):
https://www.cnblogs.com/yw0219/p/8047938.html或https://blog.csdn.net/mynamepg/article/details/83110538
注意:
1、首先这里要先普及一个小知识点,在其他语言中,\\
表示我想要在正则表达式中插入一个普通的反斜杠,请不要给它任何特殊的意义,而在Java中,\\
表示我要插入一个正则表达式的反斜杠,所以其后的字符具有特殊的意义。也就是说,在Java里,只有\\
才表示转义,不同于其他语言\
就能代表转义。
2、?在重复限定符后表示尽可能少重复,不是贪婪模式了
3、零宽断言(?=exp)、(?<=exp)
小括号的另一种用途是通过语法(?#comment)来包含注释。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d \d?(?#0-199)
。
正则:
1、匹配xxx前面的位置
csdn(小溪彼岸)正则使用从0开始学习(一):https://blog.csdn.net/zww1984774346/article/details/78518168
文本:How are you doing
正则:.*?(?=ing)
匹配结果: How are you do
2、正则表达式匹配大括号的内容(包括大括号)
{[\S\s]+}
3、正则表达式匹配大括号里面的内容(不包括大括号)
正则表达式: (?<=\{)[^}]*(?=\})
(?<=\{) 匹配以左花括号开头
[^}]* 取得内容
(?=\}) 匹配以右花括号结束
4、正则获取HTML代码中img的src地址
5、替换文档里面某个字符串
String str="张三和王四是中国人";
String regex2="[(张三)(王四)]";//一个*代替一个字
String regex3="(张三)";//一个字代替一个括号里面的内容
String str2=str.replaceAll(regex2,"*");
System.out.println(str2);
String str3=str.replaceAll(regex3,"*");
6、分组替换,如替换手机号的中间四位
idCard.replaceAll("(\\d{4})\\d{10}(\\w{4})","$1*****$2");
4304*****7733
$1、$2、……表示正则表达式里面第一个、第二个、……括号
但是 对应括号内的内容不替换
7、查找比如超找英文作文中单个字符的单词
使用 Pattern Matcher
String str4="gello hh jjjnihao good god dog mmm";
Pattern a=Pattern.compile("\\b[a-zA-Z]{3}\\b");
Matcher m=a.matcher(str4);
while (m.find()) {
System.out.println(m.group());
}
}
常用
一.介绍:
正则表达式在java.util.regex里面,具体的各种用法可以查找api手册
二. 常用格式
其中:^表示以此正则表达式开始 $是以此正则表达式结尾
1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
4 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7 身份证号:
15或18位身份证:^\d{15}|\d{18}$
15位身份证:^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
8 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
9 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
三、校验字符的表达式
1 汉字:^[\u4e00-\u9fa5]{0,}$
2 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3 长度为3-20的所有字符:^.{3,20}$
4 由26个英文字母组成的字符串:^[A-Za-z]+$
5 由26个大写英文字母组成的字符串:^[A-Z]+$
6 由26个小写英文字母组成的字符串:^[a-z]+$
7 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
9 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
12 禁止输入含有~的字符:[^~\x22]+
四、取出匹配的所有字符串
String content="2019年05月25日前应收取货款30,000.00元,截止当前尚余9,500.00元金额未收,请催收!";
String regex="([\\s\\S]+?)前应收取货款([\\s\\S]+?)元,截止当前尚余([\\s\\S]+?)元金额未收,请催收!";
List<String> matchs =new ArrayList<>();
Matcher m = Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(content);
int i = m.groupCount();
System.out.println(i);
int j=0;
while (m.find()) {
String match = m.group(1).trim();
if(StringUtils.isNotBlank(match)){
matchs.add(match);
}
String match2 = m.group(2).trim();
if(StringUtils.isNotBlank(match2)){
matchs.add(match2);
}
String match3 = m.group(3).trim();
if(StringUtils.isNotBlank(match3)){
matchs.add(match3);
}
System.out.println(j+"次:"+matchs.toString());
j++;
}
System.out.println("================");
System.out.println(matchs);