java【基础】正则表达式
1 字符串判断
java的正则使用的是Pattern以及Matcher来配合使用的。
如果只是用来判断输入的字符串是否符合格式,推荐使用Matcher的matches方法。
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com";
String regEx = "[\\w]+@[\\w]+\\.com";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher =pattren.matcher(str);
System.out.println(matcher.matches());
}
如果是需要获取匹配的分组内容。推荐使用find和group
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com";
String regEx = "([\\w]+)@([\\w]+\\.)com";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher =pattren.matcher(str);
System.out.println(matcher.find());//true
System.out.println(matcher.group(1));//service
System.out.println(matcher.group(2));//qq.
}
2字符串分割
使用pattren.split
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com@x";
String regEx = "@";
Pattern pattren = Pattern.compile(regEx);
String[] strs =pattren.split(str);
StringBuffer buf = new StringBuffer();
buf.append("[");
for(int i=0;i<strs.length;i++) {
buf.append(strs[i]);
if(i<(strs.length-1)) {
buf.append(",");
}
}
buf.append("]");
System.out.println(buf.toString());//[service,qq.com,x]
}
3字符串替换
Matcher replaceFirst 找到第一个位置进行替换
replaceAll 替换所有位置
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com@x";
String regEx = "@";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher = pattren.matcher(str);
System.out.println(matcher.replaceFirst(",@"));//service,@qq.com@x
System.out.println(matcher.replaceAll("?"));//service?qq.com?x
}
上面的替换似乎完成了我们想要的功能,但是如果我任性点,我只想替换掉最后的一个@那我怎么办,java提供了比较自由的替换appendReplacement。
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com@x@y";
String regEx = "@";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher = pattren.matcher(str);
//System.out.println(matcher.replaceFirst(",@"));
//System.out.println(matcher.replaceAll("?"));
StringBuffer sb = new StringBuffer();
int index = 0;
while(matcher.find()) {
index++;
if(index==2) {
matcher.appendReplacement(sb, "?");
}
}
matcher.appendTail(sb);
System.out.println(sb.toString());//service@qq.com?x@y
}
上面的是指定位置,这里我们配合分组来实现这样一个功能 我要给每个数字后面都加一个$符号 比如 12abc3deg623 我要置换为 12$abc3$deg623$
手册上:
替换字符串可能包含到以前匹配期间所捕获的子序列的引用:$g 每次出现时,都将被 group(g) 的计算结果替换。$ 之后的第一个数始终被视为组引用的一部分。如果后续的数可以形成合法组引用,则将被合并到 g 中。只有数字 '0' 到 '9' 被视为组引用的可能组件。例如,如果第二个组匹配字符串 "foo",则传递替换字符串 "$2bar" 将导致 "foobar" 被添加到字符串缓冲区。可能将美元符号 ($) 作为替换字符串中的字面值(通过前面使用一个反斜线 (\$))包括进来。
注意,在替换字符串中使用反斜线 (\) 和美元符号 ($) 可能导致与作为字面值替换字符串时所产生的结果不同。美元符号可视为到如上所述已捕获子序列的引用,反斜线可用于转义替换字符串中的字面值字符。
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "12abc3deg623";
String regEx = "^([\\d]+)abc([\\d]+)deg([\\d]+)$";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher = pattren.matcher(str);
StringBuffer sb = new StringBuffer();
//System.out.println(matcher.find());
/*System.out.println(matcher.find());
System.out.println(matcher.groupCount());*/
while(matcher.find()) {
matcher.appendReplacement(sb, "$1\\$abc$2\\$deg$3\\$");
}
matcher.appendTail(sb);
System.out.println(sb.toString());//12$abc3$deg623$
}
java【基础】正则表达式的更多相关文章
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- JAVA基础--正则表达式
. any character \d A digit 0-9 \D a non-digit [^0-9] \s a whitespace character, 空白字符 \S a non-w ...
- Java基础——正则表达式
一.什么是正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符 ...
- Java基础--正则表达式的规则
注意:正则表达式只关注格式是否正确,不关注内容是否有效. 一.字符集合, []表示一个字符. 1.[abc] :指a,b,c中的任意一个字符. 2.[^abc]:指除了a,b,c外的任意字符. 3.[ ...
- 二十八、Java基础--------正则表达式
在对字符串进行处理时一方面可以利用String对象的一些处理方法另一方面可以利用正则表达式,但是一般情况下用String对象方法进行处理起来会相对麻烦一些而正则表达式可以很方便的解决问题.为了更好的学 ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- 黑马程序员:Java基础总结----正则表达式
黑马程序员:Java基础总结 正则表达式 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import java.util.regex.*; 符合一定规 ...
- Java基础七-正则表达式
Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...
- Java基础学习总结(35)——Java正则表达式详解
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...
- Java基础 -- 字符串(格式化输出、正则表达式)
一 字符串 1.不可变String String对象是不可变的,查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以包含修改后 ...
随机推荐
- 1.1.20 Word不能保存问题
1.进入如下目录:C:\用户(user)\Administrator\AppData\Roaming\Microsoft\Templates 2.找到Normal和NormalOld的两个文件,删除. ...
- Springboot 允许跨域访问
服务提供段Application.java中添加如下代码: @Beanpublic CorsFilter corsFilter() { UrlBasedCorsConfigurationSource ...
- Java Collection - 001 集合的遍历
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.java.domain ...
- Grafana介绍
Grafana是一个开源的度量分析与可视化套件.纯 Javascript 开发的前端工具,通过访问库(如InfluxDB),展示自定义报表.显示图表等.大多使用在时序数据的监控方面,如同Kibana类 ...
- 干掉hao123劫持浏览器主页
原因可能是安装某个软件流氓捆绑了IE主页导致的,建议这样尝试: 一.如果安装有三方安全防护类软件,排查流氓软件,建议运行系统自带的Windows Defender或者MSE程序扫描系统. 二.如果有检 ...
- JQuery miniui使用小记
1.renderer="onActionRenderer" 如我们需要在一行数据时加上删除操作时,就需要在每行上加上“删除”按钮,以下为实现代码: 列加载时主要的属性
- 在HTML中限制input 输入框只能输入纯数字
限制 input 输入框只能输入纯数字 onkeyup = "value=value.replace(/[^\d]/g,'')" 使用 onkeyup 事件,有 bug ,那就是在 ...
- python 的序列化和反序列化
什么是序列化?简单来说就是将数据存储到物理内存上的过程叫序列化. 什么是反序列化?将数据从物理内存存储到程序内存的过程叫做反序列化. 下面来看一下python中使用json进行序列化和反序列化的实例d ...
- Java序列化机制原理
Java序列化就是将一个对象转化为一个二进制表示的字节数组,通过保存或则转移这些二进制数组达到持久化的目的.要实现序列化,需要实现java.io.Serializable接口.反序列化是和序列化相 ...
- nginx ------反向代理和负载均衡
最近由于公司的业务增长 服务器承受不住压力经常出现崩溃现象 为了解决 使用nginx的负载均衡解决,以下是操作步骤: 1.nginx 的负载均衡:将压力分散到不同的机器上 nginx不单可以作为强大的 ...