\d 匹配单个数字
\d\d\d 匹配3个数字
\d* (星号的用法)匹配0个或多个数字
\d+ (加号的用法)匹配1个到多个数字
\d{10000} (花括号的用法)匹配一万个数字
\d{m,n} 匹配m个到n个数字
\d{m, } 匹配m个及以上个的数字
\d{0, n} 匹配小于等于n个数字
\w 匹配单个字符(字母,数字,下划线)
\s 匹配单个空格(普通空格,tab空格,回车空格)
\D 大写D表示匹配单个非数字
\W 大写W表示匹配单个非字母数字下划线元素
\S 大写S表示匹配非空格
. 一个点号表示匹配任意一个元素,通常是占位用
* 星号,用在匹配表达式的后面,表示这个表达式匹配的元素可以出现0次或多次
+ 加号,同样用在匹配表达式的后面,出现至少一次。
? 问号,同样用在匹配表达式的后面,表示匹配0个或1个元素
| 竖杠,代表多个匹配之间的或关系,满足一个即可
[] 方括号[] 用于匹配指定范围内的字符,比如[123456789] 可以匹配 1~9。
- 一个杠-用在方括号的匹配范围中,表示范围的两端,比如上面的[123456789]可以匹配成[1-9],又比如想要匹配所有字母和数字,可以写成[0-9a-zA-Z]
^ 一个乘方符号^同样用在范围匹配中,表示非此范围的类型匹配。
比如这道编程题:
这里根据题意要求的第二条,要使用除了字母之外的所有元素分割字符串,然后倒序输出:可以使用string.split()方法来匹配这些根据他们来分割的元素。
String[] words = input.split("[^a-zA-Z]+");//不匹配单词 ^ 表示否定
StringBuilder sb = new StringBuilder();
for(int i = words.length-1; i >= 0; i--){
sb.append(words[i] + " ");
}
System.out.print(sb.toString().trim());
注意,java当中,除了字符串的split()方法之外,还经常用到的正则的方法还有:
一:字符串的.matches方法
new String().matches(“正则表达式”) -->boolean
二:Pattern 和 Matcher
实际上字符串的matches方法底层就是这个方法
这里用括号括起来正则表达式的一部分,还可以取出这部分正则匹配到的字符串。
group(0) 被用来保存整个匹配的字符串
Pattern pattern = Pattern.compile("Name:(\\w+)\\s*Age:(\\d{1,3})");
Matcher matcher = pattern.matcher("Name:Aurora Age:18");
if(matcher.matches()) {
String group1 = matcher.group(1);
String group2 = matcher.group(2);
System.out.println(matcher.group(0)); // 输出为 Name:Aurora Age:18
System.out.println(group1); // 输出为 Aurora
System.out.println(group2); // 输出为 18
}
三:字符串的replaceAll()方法:–>String
System.out.println("二分,回溯,递归,分治".replaceAll("[,;\\s]+", ";"));
System.out.println("搜索;查找;旋转;遍历".replaceAll("[,;\\s]+", ";"));
System.out.println("数论 图论 逻辑 概率".replaceAll("[,;\\s]+", ";"));
输出:
二分;回溯;递归;分治
搜索;查找;旋转;遍历
数论;图论;逻辑;概率
若不想替换掉,而只想将正则匹配出来的部分添加一些前缀或后缀,可以用这种方式:
System.out.println("二分,回溯,递归,分治".replaceAll("([,;\\s]+)", "---$1---"));
System.out.println("搜索;查找;旋转;遍历".replaceAll("([,;\\s]+)", "---$1---"));
System.out.println("数论 图论 逻辑 概率".replaceAll("([,;\\s]+)", "---$1---"));
==这里的$1取出了第一个被括号括起来的正则部分,并且在它的前面和后面加上- - -
输出为:
二分---,---回溯---,---递归---,---分治
搜索---;---查找---;---旋转---;---遍历
数论--- ---图论--- ---逻辑--- ---概率
最后补充一个非贪婪匹配的知识点:
? 问号代表非贪婪匹配
非贪婪匹配的定义是 在能匹配目标字符串的前提下,尽可能少的向后匹配。