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对象,以包含修改后 ...
随机推荐
- 2.3 Visio画虚线后插入word或PPT变为实线
选中实线后,左键选择->格式->线条->粗细->自定义->设置为0pt
- 阅读 video on-screen display v6.0笔记
阅读 video on-screen display v6.0笔记 关于axi总线时钟的区分 需要弄清楚的是aclk, aclken, aresetn 信号是和video 有关的,axi4-lite的 ...
- 5、在Dreamweaver cc 2017中添加服务器扩展组件
Adobe DW CC 2015对HTML5.CSS3.jQuery.jQuery UI都有很好的支持,无奈这个版本却未提供开发动态网站所需要的服务器行为面板.数据库面板以及绑定面板等.要添加这个面板 ...
- 记一次nginx403错误
同事开发微信小程序,小程序通过API接口调用我们的人脸比对API,但是一直是提示403,通过查看查看nginx日志,发现请求并没有转发出去,转发出去的请求,应该是301,重定向, 然后就开始在ngin ...
- 基于MNIST数据集使用TensorFlow训练一个包含一个隐含层的全连接神经网络
包含一个隐含层的全连接神经网络结构如下: 包含一个隐含层的神经网络结构图 以MNIST数据集为例,以上结构的神经网络训练如下: #coding=utf-8 from tensorflow.exampl ...
- 涂抹mysql笔记-搭建mysql高可用体系
mysql的高可用体系<>追求更高稳定性的服务体系 可扩展性:横向扩展(增加节点).纵向扩展(增加节点的硬件配置) 高可用性<>Slave+LVS+Keepalived实现高可 ...
- git 在本地拉取远程分支的代码(并不做提交操作)
1. git fetch 获取远程的所有分支 2. 在执行 git checkout -b local-branch-name origin/remote-branch 就可以将远程分支remote ...
- Python有趣时刻,这些代码让你大呼"卧槽,怎么会这样"
分享一个实用问题,用python读取Excel并保存字典,如何做? 下面是该同学问题截图和代码 image.png 代码截图是下面这样的 image.png 不知道大家第一眼看了这个代码,什么感受?我 ...
- Ajax的异步与同步(async)
1.async值为true (异步)当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说 ...
- pass parameter by endpoint, this is for websocket
使用了Java的字符串:@ServerEndpoint("/chat/{room}")public class MyEndpoint {@OnMessagepublic void ...