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

言归正传: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. PatentTips - Hamming distance comparison

    BACKGROUND INFORMATION In a typical data processing environment, data may be transmitted in multiple ...

  2. [bzoj1507][Usaco2009 Hol]Transmission Delay 传输谍延时_动态规划

    Transmission Delay 传输谍延时 bzoj-1581 Usaco-2009 Hol 题目大意:题目链接. 注释:略. 想法: 动态规划. 首先我们考虑从后往前dp.(最近好多题都是从后 ...

  3. 21、Java并发性和多线程-Java中的锁

    以下内容转自http://ifeve.com/locks/: 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂.因为锁(以及其它更高级的 ...

  4. MyBatis3-传递多个参数(Multiple Parameters)

    传递多个参数一般用在查询上,比如多个条件组成的查询,有以下方式去实现: 版本信息: MyBatis:3.4.4 1.自带方法 <select id="getUserArticlesBy ...

  5. 美河LINUX 内核学习视频

    Linux内核从原理到代码详解 培训视频 Linux内核源码研读与实战演练 [7.10][美河资料发布小组@aipepsi][linux内核分析视频教程] 炼数成金Linux内核探秘 [11.23][ ...

  6. Linux内核project导论——前言

    想要研究linux内核.使用linux内核,首先要知道linux内核能做到什么,提供了什么.我看过非常多刚開始学习的人一进入公司就開始使用linux内核开发内核模块.使用的不管是通信方式.内存接口还是 ...

  7. [Vue-rx] Stream an API using RxJS into a Vue.js Template

    You can map remote data directly into your Vue.js templates using RxJS. This lesson uses axios (and ...

  8. Python3基础(十二) 学习总结·附PDF

    Python是一门强大的解释型.面向对象的高级程序设计语言,它优雅.简单.可移植.易扩展,可用于桌面应用.系统编程.数据库编程.网络编程.web开发.图像处理.人工智能.数学应用.文本处理等等. 在学 ...

  9. hdu 4193 单调队列

    题意是给你n个数   组成的环   求以一个数开头 的数列全部前缀都为非负数的数列的个数: 思路:  先扩展成2*n的数列 然后求出sum[i]表示前i项的和     对每一个i>.=n结尾的数 ...

  10. oop_day06_抽象类、接口_20150814

    oop_day06_抽象类.接口_20150814 1.static final常量: 1)必须声明同一时候初始化.不能改动,类名点来訪问 2)常量名建议全部字母都大写 3)编译器编译时会直接替换为详 ...