最近遇到了一个字符串处理的功能,忽然发现了正则表达式的强大,深深的被她的迷人魅力所吸引,以前只是听说,今天亲眼所见,亲身经历,真的彻底折服。

言归正传:java中String类里面封装了很多字符串处理的方法,替换、查找、包含等,但是我今天遇到了一个功能竟然没有封装,就是查找出字符串内所有匹配正则表达式的字符串数组,(源字符串“2012-08-12 水电费 2012-12 abcde 2012-08-23”,正则表达式:“\\d{4}[ /-]{1}\\d{2}([ /-]{1}\\d{2})?”,我所需要的就是{“2012-08-12”,“2012-12”,“2012-08-23”}),这该怎么实现呢?

为了实现我的目的,我也煞费周折啊。认真研究了Pattern和Matcher两个类,幸好是,要不然我也就体会不到这种柳暗花明的感觉了,也感受不到正则的魅力了。其实String自身携带的方法已够应付绝大多数的应用了,Pattern中的方法基本在String中都有体现,即单独使用Pattern的时候相对就少了一点,Matcher也就使用了find() 和group()就可以实现我上面提出的功能了。

具体实现:

		String str="2012-08-12 2012-12 abcde 2012-08-23 ";
String regex = "\\d{4}[ /-]{1}\\d{2}([ /-]{1}\\d{2})?"; //正则表达式
Pattern pattern = Pattern.compile(regex);
Matcher m = pattern.matcher(str);
List<String> matchRegexList = new ArrayList<String>();
while(m.find()){
matchRegexList.add(m.group());
}

下面是整个字符串通过正则表达式进行拆分后(包含拆分符,String.split()返回的不包含正则表达式的值,要不然我也不用费那么大劲了)的数组:

		String str="2012-08-12 2012-12 abcde 2012-08-23 ";
String regex = "\\d{4}[ /-]{1}\\d{2}([ /-]{1}\\d{2})?"; //正则表达式
Pattern pattern = Pattern.compile(regex);
Matcher m = pattern.matcher(str);
List<String> matchRegexList = new ArrayList<String>();
while(m.find()){
matchRegexList.add(m.group());
}
System.out.println(m.groupCount());
String[] result = pattern.split(str); //使用正则表达式,分割字符串
List<String> allSplitList = new ArrayList<String>();
int len = matchRegexList.size() > result.length ? matchRegexList.size():result.length;
for(int i=0; i<len; i++){
if(i<result.length){
allSplitList.add(result[i]);
}
if(i<matchRegexList.size()){
allSplitList.add(matchRegexList.get(i));
}
}
for (int i = 0; i < allSplitList.size(); i++) { //获取源字符串中匹配正则表达的字符串
System.out.println("-"+allSplitList.get(i)+"-");
}

正则表达式提取String子串的更多相关文章

  1. Java正则表达式提取String字符串中的IP地址

    /** * 正则提前字符串中的IP地址 * @param ipString * @return */ public static List<String> getIps(String ip ...

  2. 正则表达式提取string 中的表名

    简单版本: Regex reg = new Regex(@"(?i)\bfrom\b(?![^\[\]]*\])\s+(\[[^\[\]]+\]|\S+)"); MatchColl ...

  3. asp.net正则表达式提取网页网址、标题、图片实例以及过滤所有HTML标签实例

    无论你用什么语言,正则表达式的处理方法都是非常灵活.高效的,尤其是对某些字符串的抓取.过滤方面,更显其优势. 正则表达式的写法通常比较简单,几行短代码便能轻松完成看似很复杂的事情,更值得称赞的是,它的 ...

  4. c# 使用正则表达式 提取章节小说正文全本篇

    这一节主要内容是使用正则表达式提取网站的正文,主要面向于小说章节网站.其中涉及到一些其他知识点,比如异步读取.异步流写入等,代码中都会有详细的注解.现在流行的网络文学都是每日一更或几更,没有一个统一的 ...

  5. java 正则表达式提取html纯文本

    本文来自我的个人博客: java 正则表达式提取html纯文本 做内容的大家都知道,从html中直接提取纯文本是一个非常大的问题.现将我做的正则匹配贴上: import java.util.regex ...

  6. java正则表达式提取地址中的ip和端口号

    由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...

  7. regular expression (如何用Sed和正则表达式提取子字符串)

    echo "mv u3_yunying.war   u3_yunying.war_`date +%Y%m%d%H%M`" | sed "s/\(mv\) \(\w*.wa ...

  8. Qt正则表达式提取数据

    这几天在上嵌入式课程设计,需要用到Qt,这个是信号与槽的,寒假的时候也简单学习了一些,但是没有怎么深入,又回过来看了看Qt,发现Qt的ui界面配置与Android的好像,当然Qt也可以拿来开发Andr ...

  9. JS支持正则表达式的 String 对象的方法

    注意:本文中所有方法的 RegExp 类型的参数,其实都支持传入 String 类型的参数,JS会直接进行字符串匹配. (相当于用一个简单的非全局正则表达式进行匹配,但字符串并没有转换成 RegExp ...

随机推荐

  1. Ubuntu上面安装Redis Python

    Ubuntu上面安装Redis Python 1,下载redis源码https://redis.io/download,下载地址:http://124.205.69.169/files/A092000 ...

  2. 字符串的切割操作(strtok,split)

    一:strtok C/C++:char *strtok(char s[], const char *delim); s 代表须要切割的字符串,delim代表切割的标志,參数都为比选!返回指向切割部分的 ...

  3. 怎样用EA设计ER图

    我们开发系统从文档開始,而EA就是替我们开发文档的好工具.结束了我们从概念设计到逻辑设计中的非常多问题.完好我们的文档. 如今就给大家说说如何在EA中设计概念模型ER图: 首先打开EA-"新 ...

  4. jQyery 整体架构

    jQuery的模块 一.jQuery一共有13个模块: 1. 核心方法 2. 回调模块(callbacks) 3. 数据缓存 4. 异步队列(Deffered) 5. 选择器操做 6. 属性操作 7. ...

  5. 【干货】Kafka 事务特性分析

    特性背景 消息事务是指一系列的生产.消费操作可以要么都完成,要么都失败,类似数据库的事务.这个特性在0.10.2的版本是不支持的,从0.11版本开始才支持.华为云DMS率先提供Kafka 1.1.0的 ...

  6. intellij idea 写 Helloworld

    http://www.jetbrains.com/idea/webhelp/creating-and-running-your-first-java-application.html Creating ...

  7. BNU 13064 Dice (I) 前缀和优化DP

    Dice (I)   You have N dices; each of them has K faces numbered from 1 to K. Now you have arranged th ...

  8. FormatString格式大众人全

    FormatString格式大众人全 Posted on 2010-08-12 16:14 moss_tan_jun 阅读(457) 评论(0) 编辑 收藏 格式化日期和数字的字符串经常要用到这个, ...

  9. 【模板】 倍增lca

    虽然很基础,但是还是复习了一下,毕竟比树剖好写... 代码: #include<iostream> #include<cstdio> #include<cmath> ...

  10. css样式之vertical-align垂直居中的应用

    css样式之vertical-align垂直居中的应用:将图片垂直左右居中 元素垂直居中 1:必须给容器父元素加上text-align:center 2:必须给当前元素转换成行内块元素,display ...