正则表达式(regex)
- 定义:用有固定意义的字符(元字符)描述一种字符串匹配规则的字符串
- 元字符及常见规则写法:
- | - |
---|---|
\\\ |
转义字符,输出一个\ |
() |
括号内表示一个整体 |
. |
任何单个字符 |
\d |
匹配0-9的一个数字 |
\D |
非数字 |
\w |
匹配数字、大小写字母、以及_ |
\W |
匹配除了\w 以外的字符 |
\s |
空白字符、空格、\t 、\n 等 |
\S |
非空白字符 |
[abc] |
abc中的任意一个字母 |
[^abc] |
任何字符除了a、b、c |
[a-z] |
匹配a-z小写字母 |
[a-z][A-Z] |
匹配a-z,A-Z的字母 |
[0-3][7-9] |
匹配0-3或者7-9的数字 |
? |
1次或0次 |
* |
0次或多次 |
+ |
1次或多次 |
{n} |
恰好n次 |
{n, } |
至少n次 |
{n, m} |
至少n次,单不超过m次 |
\\1 |
表示使用正则表达式中第一括号()中的表达式 |
$1 |
表示取第一个括号()中的表达式匹配的内容 |
纯数字
[0-9]+
"\\d+"
合法的电话号码
"1[3578][0-9]{9}"
"1[3578]\\d{9}"
重复出现的字符
"(.)\\1{1, }"
完全匹配
//多次使用同一个正则表达式
//创建一个正则表达式的对象
Pattern pattern = Pattern.compile(regex);
//创建匹配对象
Matcher matcher = pattern.matcher(string);
//结果
boolean = matcher.matchers();
String string = "he was hello";
String[] stringArray = string.split(" ");
System.out.println(Arrays.toString(stringArray));
stringArray = string.split("\\s+");
System.out.println(Arrays.toString(stringArray));
//判断是否是合法的手机号
string = "12345678901";
boolean isAllNum = string.matches("1[3578][0-9]{9}");
System.out.println(isAllNum);
//根据正则表达式替换指定内容
string = "fjdklsaj:dfjklsj djfklsa:34219490 jfkdls:dhkjas ";
String newString = string.replaceAll("[0-9]{8}", "*****");
System.out.println(newString);
string = "aaaahahhhhkjklssss";
// \1 表示使用正则表达式中第一括号()中的表达式
// $1表示取第一个括号()中的表达式匹配的内容
newString = string.replaceAll("(.)\\1{1,}", "$1");
System.out.println(newString);
全局搜索
//创建一个正则表达式的对象
Pattern p = Pattern.compile("\\w+@\\w+(\\.\\w{2,3})");
//创建匹配器对象
Matcher matcher = p.matcher("1109846929@qq.com");
//查找是否存在匹配的内容
while(matcher.find()) {
//获取匹配的内容
System.out.println(matcher.group());
//表示正则表达式中第一个括号()里匹配的内容
System.out.println(matcher.group(1));
}