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【基础】正则表达式的更多相关文章

  1. Java基础-正则表达式(Regular Expression)语法规则简介

    Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...

  2. JAVA基础--正则表达式

    .  any character \d  A digit 0-9 \D  a non-digit [^0-9] \s  a whitespace character, 空白字符 \S  a non-w ...

  3. Java基础——正则表达式

    一.什么是正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符 ...

  4. Java基础--正则表达式的规则

    注意:正则表达式只关注格式是否正确,不关注内容是否有效. 一.字符集合, []表示一个字符. 1.[abc] :指a,b,c中的任意一个字符. 2.[^abc]:指除了a,b,c外的任意字符. 3.[ ...

  5. 二十八、Java基础--------正则表达式

    在对字符串进行处理时一方面可以利用String对象的一些处理方法另一方面可以利用正则表达式,但是一般情况下用String对象方法进行处理起来会相对麻烦一些而正则表达式可以很方便的解决问题.为了更好的学 ...

  6. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  7. 黑马程序员:Java基础总结----正则表达式

    黑马程序员:Java基础总结 正则表达式   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import  java.util.regex.*; 符合一定规 ...

  8. Java基础七-正则表达式

    Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...

  9. Java基础学习总结(35)——Java正则表达式详解

    在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu  ...

  10. Java基础 -- 字符串(格式化输出、正则表达式)

    一 字符串 1.不可变String String对象是不可变的,查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以包含修改后 ...

随机推荐

  1. Java面试题 OOAD & UML+XML+SQL+JDBC & Hibernate

    二.OOA/D 与UML 部分:(共6 题:基础2 道,中等难度4 道) 96.UML 是什么?常用的几种图?[基础] 答:UML 是标准建模语言:常用图包括:用例图,静态图(包括类图.对象图和包图) ...

  2. 爬虫-day01-基础知识

    '''爬虫的构成下载器: 抓取页面 urllib equests selenium + webdriver解析器: 解释并提取页面元素 BeautifulSoup4 PyQuery Xpath Reg ...

  3. Linux进程被杀掉(OOM killer),查看系统日志

    基本概念: Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉. ...

  4. ros6.0的包转发图解

    原文: https://wiki.mikrotik.com/wiki/Manual:Packet_Flow_v6 Overview Diagram Examples Ipsec Encryption/ ...

  5. springBoot 整合mybaits 逆向工程

    pom.xml文件中增加配置项 <build> <plugins> <plugin> <groupId>org.springframework.boot ...

  6. Docker系列07:Docker-compose

    1  什么是Docker-Compose Compose项目来源于之前的fig项目,使用python语言编写,与docker/swarm配合度很高. Compose 是 Docker 容器进行编排的工 ...

  7. 性能监控扩展篇(grafana + influxdb + telegraf)

    之前已经说过了自己写sh脚本监控,我看有人评论了说用telegraf进行数据收集,于是乎去研究了下,感觉还可以,不过磁盘io的的表个人感觉有些美中不足,并未直接给出读写速率的情况,可能是研究时间太短, ...

  8. atom常用插件

    汉化 simplified-chinese-menureact atom-react-snippets-0.5.0polymer atom-polymer-0.13.0polymer Atom-Pol ...

  9. 195. Spring Boot 2.0数据库迁移:Flyway

    [视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源码: ...

  10. Source Code Pro 编程字体

    Source Code Pro :是 Adobe 公司号称最佳的编程字体,而且还是开源的 它非常适合用于阅读代码,支持 Linux.Mac OS X 和 Windows 等操作系统,而且无论商业或个人 ...