Java正则表达式提取字符
来源:互联网 发布:库里本赛季数据统计 编辑:程序博客网 时间:2024/04/30 00:16
需求:提取车牌号中最后一个数字,如:宁A7865提取5,宁A876X提取6
实现方法:
import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test { public static void main(String[] args) { String s = "A876X"; // 把要匹配的字符串写成正则表达式,然后要提取的字符使用括号括起来 // 在这里,我们要提取最后一个数字,正则规则就是“一个数字加上大于等于0个非数字再加上结束符” Pattern pattern = Pattern.compile("(\\d)[^\\d]*$"); Matcher matcher = pattern.matcher(s); if(matcher.find()) System.out.println(matcher.group(1)); }}
关于Matcher 中的几个方法说明:
Mathcer.start()/ Matcher.end()/ Matcher.group()
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
group()返回匹配到的子字符串
Java代码示例:
Pattern p=Pattern.compile(“\d+”);
Matcher m=p.matcher(“aaa2223bb”);
m.find();//匹配2223
m.start();//返回3
m.end();//返回7,返回的是2223后的索引号
m.group();//返回2223
Mathcer m2=p.matcher(“2223bb”);
m2.lookingAt(); //匹配2223
m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0
m2.end(); //返回4
m2.group(); //返回2223
Matcher m3=p.matcher(“2223”); //如果Matcher m3=p.matcher(“2223bb”); 那么下面的方法出错,因为不匹配返回false
m3.matches(); //匹配整个字符串
m3.start(); //返回0
m3.end(); //返回3,原因相信大家也清楚了,因为matches()需要匹配所有字符串
m3.group(); //返回2223
说了这么多,相信大家都明白了以上几个方法的使用,该说说正则表达式的分组在java中是怎么使用的.
start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
Java代码示例:
Pattern p=Pattern.compile(“([a-z]+)(\d+)”);
Matcher m=p.matcher(“aaa2223bb”);
m.find(); //匹配aaa2223
m.groupCount(); //返回2,因为有2组
m.start(1); //返回0 返回第一组匹配到的子字符串在字符串中的索引号
m.start(2); //返回3
m.end(1); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.end(2); //返回7
m.group(1); //返回aaa,返回第一组匹配到的子字符串
m.group(2); //返回2223,返回第二组匹配到的子字符串
现在我们使用一下稍微高级点的正则匹配操作,例如有一段文本,里面有很多数字,而且这些数字是分开的,我们现在要将文本中所有数字都取出来,利用java的正则操作是那么的简单.
Java代码示例:
Pattern p=Pattern.compile(“\d+”);
Matcher m=p.matcher(“我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com”);
while(m.find()) {
System.out.println(m.group());
}
输出:
456456
0532214
123
如将以上while()循环替换成
while(m.find()) {
System.out.println(m.group());
System.out.print(“start:”+m.start());
System.out.println(” end:”+m.end());
}
则输出:
456456
start:6 end:12
0532214
start:19 end:26
123
start:36 end:39
现在大家应该知道,每次执行匹配操作后start(),end(),group()三个方法的值都会改变,改变成匹配到的子字符串的信息,以及它们的重载方法,也会改变成相应的信息.
注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用。
- Java正则表达式提取字符
- Java正则表达式提取字符的方法实例
- Java 使用正则表达式提取字符串制定的字符
- java 正则表达式 提取字符串
- java正则表达式提取URL
- java正则表达式提取需要的字符并放入数组;ArrayList数组去重复
- java--字符编码,正则表达式
- java正则表达式特殊字符
- java正则表达式元字符
- Java正则表达式特殊字符
- java正则表达式特殊字符
- java正则表达式(HTML提取)
- JAVA学习正则表达式提取email
- java 正则表达式 提取 内容 先行断言
- Java正则表达式提取html纯文本
- java正则表达式(HTML提取)
- java正则表达式提取数字、英文、中文
- java利用正则表达式提取年月日数据
- Gmail两步验证
- 关于Ubuntu12.04编译环境搭建问题
- 小图片组装成大图片
- Android 自定义View(API解析+Demo)
- FreeWrap工具,将tcl/tk脚本转变为可执行文件
- Java正则表达式提取字符
- BZOJ1036树的统计Count
- 抓包工具Fidder详解(主要来抓取Android中app的请求)
- Redis系列学习(一)安装与配置(基于Centos7)
- Eclipse解决查看源代码出现乱码问题
- Linux设备驱动模型
- Spring框架学习(二)
- HDU 4725 —— The Shortest Path in Nya Graph
- 少有人走的路 读书笔记二