本文已参加 [新人创作礼] 活动,一起开启掘金创作之旅
Matcher类使用
1. 使用pattern对象创建出Matcher实例
string msg = "{0}"
Pattern pattern = Pattern.compile("\\{\\d}");
Matcher matcher = pattern.matcher(msg);
2. 对整个字符串展开正则匹配,只有整个字符串完全匹配后才返回真
// boolean matchers();
Boolean b = matcher.matchers(); // true
3. 对目标字符串从左边开始正则匹配,只有匹配的字符串在最左边才返回真
// boolean lookingAt();
Boolean b = matcher.lookingAt(); // true
4. 对目标字符串查找与正则匹配的下一个子序列,匹配到的子序列可以在目标串的任意位置
// boolean find();
String msg = "占位符一 {0} ,占位符二 {1}";
Pattern pattern = pattern.compile("\\{\\d}");
Matcher matcher = pattern.matcher(msg);
while(matcher.find){
String parameter = matcher.group();
String rep = msg.replace(parameter,"替换");
System.out.println(rep);
}
5. 返回匹配到的字符序列第一个字符在目标字符串中的位置
int start();
int start = matcher.start();
6. 返回匹配到的字符序列最后一个字符在目标字符串中的位置
int end();
int end = matcher.end();
7. 返回匹配到子序列
String group();
String group = matcher.group();
补充
Pattern
1. 分割字符串
String split(CharSequence input)
String regex = "\\-|\\=";
String msg = "分割一-分割二=分割三=分割四";
String[] splitStrArr = pattern.split(msg); // 分割一 分割二 分割三 分割四
// 带有limit参数,指定要分割的段数
String split(CharSequence input,int limit);
String[] splitStrArr = pattern.split(msg,2); // 分割一 分割二=分割三=分割四
常用的正则表达式
-
匹配中文字符的正则表达式: [\u4e00-\u9fa5] -
匹配空行的正则表达式:\n[\s| ]*\r -
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ -
匹配首尾空格的正则表达式:(^\s*)|(\s*$) -
匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g // -
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* -
匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? -
sql语句:^(select|drop|delete|create|update|insert).*$ -
非负整数:^\d+$ -
正整数:^[0-9]*[1-9][0-9]*$ -
非正整数:^((-\d+)|(0+))$ -
负整数:^-[0-9]*[1-9][0-9]*$ -
整数:^-?\d+$ -
非负浮点数:^\d+(\.\d+)?$ -
正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ -
非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$ -
负浮点数:^(-((正浮点数正则式)))$ -
英文字符串:^[A-Za-z]+$ -
英文大写串:^[A-Z]+$ -
英文小写串:^[a-z]+$ -
英文字符数字串:^[A-Za-z0-9]+$ -
英数字加下划线串:^\w+$ -
E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ -
URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$ -
邮政编码:^[1-9]\d{5}$ -
电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$ -
手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$ -
双字节字符(包括汉字在内):^\x00-\xff -
匹配首尾空格:(^\s*)|(\s*$) -
提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)? -
提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* -
提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)? -
提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+) -
提取信息中的中国手机号码:(86)*0*13\d{9} -
提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8} -
提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14} -
提取信息中的中国邮政编码:[1-9]{1}(\d+){5} -
提取信息中的浮点数(即小数):(-?\d*)\.?\d+ -
提取信息中的任何数字 :(-?\d*)(\.\d+)? -
电话区号:/^0\d{2,3}$/ -
腾讯QQ号:^[1-9]*[1-9][0-9]*$ -
帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ -
中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$