java正则替换字符串的高级应用

java正则替换字符串的高级应用,正则分组

正则表达式的强大不再多少,基础语法可以参考网上其他文章,本文仅介绍java中利用正则对字符串进行替换。
需求场景:需将字符串“title:大学生#END# AND text:北京#END# AND domain:sina.com” 中,title或者text后面的字符串做处理,并去掉后面的,
既然是要进行处理,处理后的结果如“title:大学生 学生 AND text:北京市 北京 市 AND domain:sina.com”那必然要想办法进行提取,String的replace方法显然已经无法满足,但正则的分组匹配完全可以解决。

  • Markdown和扩展Markdown简洁的语法

代码块

代码块语法遵循标准markdown代码,例如:

    /**
     * 将queryStr中的关键词提取并做分词处理
     * @param queryStr
     * @return
     */
    public static String surroundQueryStrProcess(String queryStr) {
        if (StringUtils.isEmpty(queryStr)) {
            return queryStr;
        }
        Pattern p = Pattern.compile("(title:|text:)([^#]*)#END#");
        Matcher matcher = p.matcher(queryStr);
        StringBuffer sbr = new StringBuffer();
        while (matcher.find()) {//从开始进行匹配直到结束
            matcher.appendReplacement(sbr, matcher.group(1)+QueryUtil.surroundParse(matcher.group(2)));//将匹配到的内容进行替换后追加到sbr,其中的QueryUtil.surroundParse是分词方法,即将matcher.group(2)的内容进行分词处理,在此不必过于纠结。
        }
        matcher.appendTail(sbr);//将匹配结束后,后续的内容一次性追加到sbr中
        return sbr.toString();
    }
/**
 * 重点介绍一下正则表达式 "(title:|text:)([^#]*)#END#",
 * 该表达式包含了两个分组(分组是用小括号来区别)即(title:|text:),([^#]*)
 * 第一分组表示匹配字符串中的"title:"或者"text:",
 * 第二个分组表示不以"#开头",用来匹配中间要处理的内容,
 * 第二个分组后面的"#END#",没有进行分组,直接匹配
 * 整个正则表达式会分别匹配到"title:大学生#END#"和"text:北京#END#",而正则中
 * 用分组的好处时,对匹配到的表达式可以再进行细分,对细分内容进行进一步的处理。
 * 
 * 总结:通过分组更灵活的对字符串进行替换操作
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值