正则表达式-将搜索结果高亮

Posted 有点懒惰的大青年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式-将搜索结果高亮相关的知识,希望对你有一定的参考价值。

模拟:

将要查找的字符串中,指定字符替换为高亮的字符:

方法一:

package com.java.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HighLight {
    public static void main(String[] args) {
        String keyword = "a";
        String regexp = keyword + "+";
        String name = "啊abfac是的Aaa爱的的a我要是alkja卡和户A玉玉aaa很快就asa啊发A阿达ff";
        
        Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(name);
        StringBuffer sb = new StringBuffer();
        
        int start = 0;
        int end = 0;
        String temp = "";        
        while(matcher.find()){
            start = matcher.start();
            sb.append(name.substring(end, start));
            temp = "<i class=\\"highlight\\">"+matcher.group()+"</i>";
            sb.append(temp);
            end = matcher.end();
        }
        
        sb.append(name.substring(end));
        
        System.out.println(sb.toString());
        
    }
}

 返回结果:

<i class="highlight">a</i>bf<i class="highlight">a</i>c是的<i class="highlight">Aaa</i>爱的的<i class="highlight">a</i>我要是<i class="highlight">a</i>lkj<i class="highlight">a</i>卡和户<i class="highlight">A</i>玉玉<i class="highlight">aaa</i>很快就<i class="highlight">a</i>s<i class="highlight">a</i>啊发<i class="highlight">A</i>阿达ff

 

 方法二:

package com.java.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HighLight2 {
    public static void main(String[] args) {
        String keyword = "a";
        String regexp = keyword;
        String name = "啊abfac是的Aaa爱的的a我要是alkja卡和户A玉玉aaa很快就asa啊发A阿达ff";
        
        Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(name);
        String resp = matcher.replaceAll("<i class=\\"highlight\\">"+keyword+"</i>");
        System.out.println(resp);
    }
}

结果:

<i class="highlight">a</i>bf<i class="highlight">a</i>c是的<i class="highlight">a</i><i class="highlight">a</i><i class="highlight">a</i>爱的的<i class="highlight">a</i>我要是<i class="highlight">a</i>lkj<i class="highlight">a</i>卡和户<i class="highlight">a</i>玉玉<i class="highlight">a</i><i class="highlight">a</i><i class="highlight">a</i>很快就<i class="highlight">a</i>s<i class="highlight">a</i>啊发<i class="highlight">a</i>阿达ff

但是问题是,将name中的大写的A也替换为小写了。

 

方法三:

package com.java.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HighLight3 {
    public static void main(String[] args) {
        String keyword = "a";
        String regexp = keyword + "+";
        String name = "啊abfac是的Aaa爱的的a我要是alkja卡和户A玉玉aaa很快就asa啊发A阿达ff";
        
        Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(name);
        StringBuffer sb = new StringBuffer();
        while(matcher.find()){
            matcher.appendReplacement(sb, "<i class=\\"highlight\\">"+matcher.group()+"</i>");
        }
        matcher.appendTail(sb);
        
        System.out.println(sb.toString());
    }
}

结果:

<i class="highlight">a</i>bf<i class="highlight">a</i>c是的<i class="highlight">Aaa</i>爱的的<i class="highlight">a</i>我要是<i class="highlight">a</i>lkj<i class="highlight">a</i>卡和户<i class="highlight">A</i>玉玉<i class="highlight">aaa</i>很快就<i class="highlight">a</i>s<i class="highlight">a</i>啊发<i class="highlight">A</i>阿达ff

很nice。又简单又快捷

 

--------

以上是关于正则表达式-将搜索结果高亮的主要内容,如果未能解决你的问题,请参考以下文章

Scintilla.NET 基于正则表达式的语法高亮

为批处理文件语法高亮创建正则表达式模式的问题

使用正则表达式查找幻数

正版上新 | Expressions,简洁优雅的正则表达式利器

循环通过 python 正则表达式匹配

通过 Java 正则表达式提取 semver 版本字符串的片段