[原]Java 正则 多子串 匹配 替换

正则表达式异常强大,一直理解不深,用的也不深,这次项目中尝试,体会到了它的强大之处。字符串查找,匹配,替换,正则无不能做,特别是灵活的运用子串匹配得到的变量值$1,$2,再进行二次处理能够达到很巧妙的效果。

Java中使用也比较简单:

1. 编译正则表达式的字面值得到对应的模式Pattern对象;

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

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

直接代码吧

public static void main(String[] args) {//被替换关键字的的数据源Map<String,String> tokens = new HashMap<String,String>();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, appendTailStringBuffer 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: testSystem.out.println(matcher.replaceAll(“$1”));//获得匹配值String temp = “<meta-data android:name=\”appid\” android:value=\”joy\”></meta-data>”;pattern = Pattern.compile(“android:(name|value)=\”(.+?)\””);matcher = pattern.matcher(temp);while(matcher.find()) {//out: appid, joySystem.out.println(matcher.group(2));}}积极的人在每一次忧患中都看到一个机会,

[原]Java 正则 多子串 匹配 替换

相关文章:

你感兴趣的文章:

标签云: