当前位置:  编程技术>java/j2ee

Java正则多字符串匹配替换

    来源: 互联网  发布时间:2014-10-22

    本文导语:  Java中使用也比较简单:1. 编译正则表达式的字面值得到对应的模式Pattern对象; 2. 创建匹配给定输入与此模式的匹配器Matcher; 3. 通过匹配器对象执行操作,匹配器对象的方法很丰富,方法之间组合使用更加强大。 代码如下:pu...

Java中使用也比较简单:
1. 编译正则表达式的字面值得到对应的模式Pattern对象;

2. 创建匹配给定输入与此模式的匹配器Matcher;

3. 通过匹配器对象执行操作,匹配器对象的方法很丰富,方法之间组合使用更加强大。

代码如下:

public static void main(String[] args) {
    //被替换关键字的的数据源
    Map tokens = new HashMap();
    tokens.put("cat", "Garfield");
    tokens.put("beverage", "coffee");

    //匹配类似velocity规则的字符串
    String template = "${cat} really needs some ${beverage}.";
    //生成匹配模式的正则表达式
    String patternString = "\$\{(" + StringUtils.join(tokens.keySet(), "|") + ")\}";

    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(template);

    //两个方法:appendReplacement, appendTail
    StringBuffer sb = new StringBuffer();
    while(matcher.find()) {
        matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
    }
    matcher.appendTail(sb);

    //out: Garfield really needs some coffee.
    System.out.println(sb.toString());

    //对于特殊含义字符"","$",使用Matcher.quoteReplacement消除特殊意义
    matcher.reset();
    //out: cat really needs some beverage.
    System.out.println(matcher.replaceAll("$1"));
    //out: $1 really needs some $1.
    System.out.println(matcher.replaceAll(Matcher.quoteReplacement("$1")));

    //到得邮箱的前缀名。插一句,其实验证邮箱的正则多种多样,根据自己的需求写对应的正则才是王道
    String emailPattern = "^([a-z0-9_\.\-\+]+)@([\da-z\.\-]+)\.([a-z\.]{2,6})$";
    pattern = Pattern.compile(emailPattern);
    matcher = pattern.matcher("test@qq.com");
    //验证是否邮箱
    System.out.println(matcher.find());
    //得到@符号前的邮箱名  out: test
    System.out.println(matcher.replaceAll("$1"));

    //获得匹配值
    String temp = "";
    pattern = Pattern.compile("android:(name|value)="(.+?)"");
    matcher = pattern.matcher(temp);
    while(matcher.find()) {
        //out: appid, joy
        System.out.println(matcher.group(2));
    }
}


一些老是忘基础


[...] 位于括号之内的任意字符

[^...] 不在括号之中的任意字符

. 除了换行符之外的任意字符,等价于[^n]

w 任何单字字符, 等价于[a-zA-Z0-9]

W 任何非单字字符,等价于[^a-zA-Z0-9]

s 任何空白符,等价于[ t n r f v]

S 任何非空白符,等价于[^ t n r f v]

d 任何数字,等价于[0-9]

D 除了数字之外的任何字符,等价于[^0-9]

[b] 一个退格直接量(特例)

 

{n, m} 匹配前一项至少n次,但是不能超过m次

{n, } 匹配前一项n次,或者多次

{n} 匹配前一项恰好n次

? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1}

+ 匹配前一项1次或多次,等价于{1,}

* 匹配前一项0次或多次.等价于{0,}

 

| 选择.匹配的要么是该符号左边的子表达式,要么它右边的子表达式

(...) 分组.将几个项目分为一个单元.这个单元可由 *、+、?和|等符号使用,而且还可以记住和这个组匹配的字符以供此后引用使用

n 和第n个分组所匹配的字符相匹配.分组是括号中的子表达式(可能是嵌套的).分组号是从左到右计数的左括号数

 

^ 匹配的是字符的开头,在多行检索中,匹配的是一行的开头

$ 匹配的是字符的结尾,在多行检索中,匹配的是一行的结尾

b 匹配的是一个词语的边界.简而言之就是位于字符w 和 w之间的位置(注意:[b]匹配的是退格符)

B 匹配的是非词语的边界的字符


题外话


邮箱验证,以前验证邮箱,网上搜个正则装在自己程序里面就用,其实这是不对的,不同的公司对邮箱的验证格式是不一样的,比方说163和qq邮箱注册,他们要求的格式都不一样,所以搜一个正则表达式就去套所有的邮箱格式也是不对的,符合自己的需求的正则才是正确的。


    
 
 

您可能感兴趣的文章:

  • java使用正则表达校验手机号码示例(手机号码正则)
  • java 正则表达式基础,实例学习资料收集大全 原创
  • Java正则表达式 reb4j
  • JAVA的类库中是否有正则表达式这样的东东?
  • java正则表达式验证函数
  • java使用正则表达为数字添加千位符的简单方法
  • 一个简单的问题,java中的正则函数是哪个?
  • java正则表达式获取url的host示例
  • 用Java正则去掉字符串中重复出现的字符
  • java去掉html标签 必须首先去掉双引号的正则
  • java正则表达式提取数字的方法实例
  • java正则表达式验证邮箱、电话号码示例
  • java正则表达式使用示例
  • java正则表达式应用的实例代码
  • java中的正则操作方法总结
  • 基于java中正则操作的方法总结
  • java中 利用正则表达式提取( )内内容
  • 利用Java正则表达式校验邮箱与手机号
  • java正则表达式表单验证类工具类(验证邮箱、手机号码、qq号码等)
  • java正则表达式解析html示例分享
  • java实现判断字符串是否全是数字的四种方法代码举例
  • Java中关于字符串字符数目的问题
  • java字符串比较获取字符串出现次数的示例
  • 在JAVA中如何实现在一个长字符串查找某个字符串??
  • 我使用corba将Java和C程序连接起来,由Java向C传递一个字符串,但是我发现我原来的0a被换成了0d 0a,那位给各解释。
  • java实现压缩字符串和java字符串过滤
  • java 字符串有沒有 像 javascript 中 split() 的方法.
  • 如何从java字符串中判断空格在第几位
  • java正则表达式验证邮箱、电话号码示例 iis7站长之家
  • java中如何将数字转化为字符串并且不足位数补0
  • 如可在java程序中产生一个几乎永不重复的字符串?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • VBScript中FormatNumber(expression ,0,-1)是什么功能?用java怎么替换?
  • 关于jre命令替换为java
  • 请问‘回车’在java中如何表示?如何替换?
  • Java中替换HTML标签的方法代码
  • Java 替换字符串中的回车换行符的方法
  • 请问Java中的替换函数
  • Java中字符串替换的函数是什么?急用!!!!!!
  • 各位高手:java中查找字符串并替换用什么方法?
  • java字符串替换排序实例
  • java实现查找文本内容替换功能示例
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3