正则表达式学习大总结

\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取出了第一个被括号括起来的正则部分,并且在它的前面和后面加上- - -
输出为:

二分---,---回溯---,---递归---,---分治
搜索---;---查找---;---旋转---;---遍历
数论--- ---图论--- ---逻辑--- ---概率

最后补充一个非贪婪匹配的知识点:
? 问号代表非贪婪匹配
非贪婪匹配的定义是 在能匹配目标字符串的前提下,尽可能少的向后匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值