项目中用到字符串分割及替换功能,String中也有想用的分割替换方法,此处采用正则表达式来操作,顺便总结下正则字符的说明,仅做技术分享交流,如果您觉得能用到,证明小编时间没白费,如果您有意见或建议,请留言。
话不多说,进入正题
一、字符说明
1、基础字符说明
x |
字符x |
\\ |
反斜杠"\" |
\t |
制表符('\u0009') |
\n |
换行符('\u000A') |
\r |
回车符('\u000D') |
[abc] |
a, b, 或者 c |
[^abc] |
除a、b、c外的任意字符 |
[a-zA-Z] |
字符a到z及A到Z中任意一个字符 |
[a-d[m-p]] |
字符a到d或者m到p之间任意一个字符,等同于[a-dm-p] |
[a-z&&[def]] |
字符d、e或者f中的任意一个字符 |
[a-z&&[^bc]] |
字符a到z中除了b或c意外的任意一个字符, 等同于 [ad-z] |
[a-z&&[^m-p]] |
字符a到z中除了m到p意外的任意一个字符,等同于 [a-lq-z] |
2、预定义字符说明
. |
任意一个字符 |
\d |
0-9中任意一个数字 |
\D |
任意一个非数字字符 |
\s |
任意一个空格字符: [ \t\n\x0B\f\r] |
\S |
任意一个非空格字符: [^\s] |
\w |
任意一个单词字符: [a-zA-Z_0-9] |
\W |
任意一个非单词字符: [^\w] |
3、边界匹配说明
^ |
一行的开始 |
$ |
一行的结束 |
\b |
一个单词的边界 |
\B |
非单词边界 |
4、量词匹配说明
X? |
字符X,匹配0或1次 |
X* |
字符X,匹配0或多次 |
X+ |
字符X,匹配1或多次 |
X{n} |
字符X,匹配n次 |
X{n,} |
字符X,匹配至少n次 |
X{n,m} |
字符X,匹配至少n次,最多m次 |
5、逻辑运算说明
XY |
X后的紧接着是Y |
X|Y |
X或者Y |
(X) |
X作为一个整体 |
注:使用特殊字符时,使用转义字符“\”,例如:如果要匹配”.” “\”则需写成“\.” “\\”;
二、使用正则表达式分割字符串及替换字符串内容
1、使用正则表达式分割字符串:
示例代码:
//import java.util.regex.Matcher; //import java.util.regex.Pattern; String rex = "1";//分割符 String matchStr = "a1b1c1d1e";//要分割的对象 //获取属于rex正则的pattern对象。 Pattern pattern = Pattern.compile(rex); //按照正则rex指定的规则分割字符串 String[] s = pattern.split(matchStr);
分割后的结果:
2、正则表达式替换字符串中的字符:
示例代码:
String rex = "(\\{\\})+"; String matchStr = "a{}b{}c{}d{}e"; //获取属于rex正则的pattern对象。 Pattern pattern = Pattern.compile(rex); //创建rex正则用于匹配字符串的匹配器 -- 同一个pattern可以有多个不同的匹配器 Matcher matcher = pattern.matcher(matchStr); //用-替换{} while (matcher.find()) { matchStr = matcher.replaceFirst("-"); matcher = pattern.matcher(matchStr); System.out.println(matchStr); }
输出结果:
a-b{}c{}d{}e a-b-c{}d{}e a-b-c-d{}e a-b-c-d-e