Java使用正则表达式进行匹配且对匹配结果逐个替换

前言:

Java使用正则表达式进行匹配,并对匹配结果逐个进行替换

下面代码示例,是将 下划线 替换成随机生成的 uuid

public class TestUtil {

    public static void main(String[] args) {
        // 待匹配替换文本
        String html = "姓名:______;年龄:______;性别:______;";
        // 正则表达式
        String regex = "_+";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(html);
        StringBuffer stringBuffer = new StringBuffer();
        // 将html中的下划线替换为该input标签
        while (matcher.find()) {
            // 匹配区间
            String substring = html.substring(matcher.start(), matcher.end());
            // 生成随机id,作为唯一标识
            String uuid = IdUtil.simpleUUID();
            // 将下划线替换为uuid
            matcher.appendReplacement(stringBuffer, matcher.group().replace(substring, uuid));
        }
        // 最终结果追加到尾部
        matcher.appendTail(stringBuffer);
        // 最终完成替换后的结果
        System.out.println(stringBuffer);
    }

}

输出结果:

姓名:9b1abd66584940d0afa88d2a4f396cc0;
年龄:550161321a634b1abcd88c77e67f685a;
性别:d7714c1870bb44b8b5a7c61f35ed190e;

匹配模式  
Pattern.CANON_EQ 启用规范等价。指定此标志后,当且仅当其完整规范分解匹配时,两个字符才可视为匹配
Pattern.CASE_INSENSITIVE 启用不区分大小写的匹配
Pattern.COMMENTS 模式中允许空白和注释。 此模式将忽略空白和在结束行之前以 # 开头的嵌入式注释。 通过嵌入式标志表达式 (?x) 也可以启用注释模式
Pattern.DOTALL 启用点阵模式。在 dotall 模式下,表达式 . 匹配任何字符,包括行终止符。默认情况下, 此表达式与行终止符不匹配。Dotall 模式也可以通过嵌入式标志表达式启用(?s)。(s 是“单行”模式的助记符,这在 Perl 中也被使用)。
Pattern.LITERAL 启用模式的文字解析。当指定此标志时,指定模式的输入字符串将被视为文字字符序列。输入序列中的元字符或转义序列将没有特殊意义。当与此标志一起使用时,标志 CASE_INSENSITIVE 和 UNICODE_CASE 保留对匹配的影响。其他旗帜变得多余。没有嵌入的标志字符用于启用文字解析。
Pattern.MULTILINE 启用多行模式。在多行模式中,表达式^和$匹配恰好在之前或之前分别是行终止符或输入序列的结尾。 默认情况下,这些表达式仅在整个输入序列的开头和结尾匹配。也可以通过嵌入式标志表达式启用多模式模式(?m)。
Pattern.UNICODE_CASE 启用 Unicode 感知的大小写折叠。当指定此标志时,不区分大小写的匹配(由 CASE_INSENSITIVE 标志启用)以与 Unicode 标准一致的方式完成。 默认情况下,不区分大小写的匹配假定仅匹配 US-ASCII 字符集中的字符。Unicode 感知案例折叠也可以通过嵌入式标志表达式启用(?u)。 指定此标志可能会造成性能损失。
Pattern.UNIX_LINES 启用 UNIX 线路模式。在这种模式下,只有'\n' 行结束在行为的认可.,^ 和 $。 UNIX 线路模式也可以通过嵌入式标志表达式启用(?d)。
Matcher方法  
appendReplacement() 追加和替换,将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个 StringBuffer 对象里
appendTail() 将最后一次匹配工作后剩余的字符串添加到一个 StringBuffer 对象里

到此这篇关于Java使用正则表达式进行匹配且对匹配结果逐个替换的文章就介绍到这了,更多相关Java正则表达式匹配内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java正则表达式匹配不到结果的解决

    如下所示: String str = "\uFEFF<?xml version=\"1.0\" encoding=\"utf-8\"?><Response xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Header Should

  • Java替换中使用正则表达式实现中间模糊匹配的方法

    使用".+?"实现中间模糊匹配的代码: public class Test { public static void main(String[] args) { String str="总会在某一个回眸的时刻醉了流年,濡湿了柔软的心.总会有某一个回眸的时刻醉了流年,濡湿了柔软的心"; str=str.replaceAll("总会在.+?流年", "总会有某一个回眸的时刻醉了流年"); System.out.println(st

  • java正则表达式匹配所有数字的案例

    用于匹配的正则表达式为 :([1-9]\d*\.?\d*)|(0\.\d*[1-9]) ( [1-9] :匹配1~9的数字: \d :匹配数字,包括0~9: * :紧跟在 \d 之后,表明可以匹配零个及多个数字: \. :匹配小数点: ? :紧跟在 \. 之后,表明可以匹配零个或一个小数点: 0 :匹配一个数字0: ) 其中的 [1-9]\d*\.?\d* 用以匹配诸如:1.23.34.0.56.78 之类的非负的整数和浮点数: 其中的 0\.\d*[1-9] 用以匹配诸如:0.1.0.23.0

  • Java使用正则表达式(regex)匹配中文实例代码

    只能输入中文 /** * 22.验证汉字 * 表达式 ^[\u4e00-\u9fa5]{0,}$ * 描述 只能汉字 * 匹配的例子 清清月儿 */ @Test public void a1() { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); String regex = "^[\\u4e00-\\u9fa5]*$"; Matcher m = Pattern.compile(regex).matc

  • Java正则表达式匹配字符串并提取中间值的方法实例

    目录 前言 场景一:提取SAML2报文 解析 场景2:提取sql中的表名和字段 总结 前言 有时候正则表达式不只是匹配一下什么数字/邮箱/身份证/日期等等,还需要匹配某一段文字,并按照既定格式提取其中的某些值. 场景一:提取SAML2报文 SAML2报文内容如下,从中提取对应的attribute name和value. <saml:AttributeStatement> <saml:Attribute Name="mail"> <saml:Attribut

  • Java正则表达式如何匹配特定html标签内的内容

    如题: 使用正则表达式,怎么匹配特定html标签内的内容. 比如,对于如下文本串: ... ignored content prefix content <html>inner content</html> postfix content ... ignored content 我们要提取出<html>标签内的内容: inner content(这里的html标签可以换成任何其它的标签,比如<p>标签) 这里引入正则表达式的group概念:详细点击文章查看

  • java如何用正则表达式匹配与提取字符串

    java.util.regex类支持用正则表达式来匹配和提取字符串,读者可以去官网查看java.util.regex的详细使用方法. 首先给出一个匹配字符串的例子(判断line是否符合格式"GraphType\\s*=\\s*\".+\"\\s*"): public static boolean isLegalInputLine(String line ) { Pattern p =Pattern.compile("GraphType\\s*=\\s*\&

  • Java正则表达式循环匹配字符串方式

    目录 正则表达式循环匹配字符串 Java匹配正则表达式大全 我们先举个例子来看看Java匹配正则表达式 匹配表达式的特殊情况 正则表达式循环匹配字符串 public static void main(String[] args) { /** * String str = "[Part 'name=1234567']"; */ String targetStr = "where 1=1 [and user_name like '%$user_name$%'] [and comp

  • Java基于正则表达式实现查找匹配的文本功能【经典实例】

    本文实例讲述了Java基于正则表达式实现查找匹配的文本功能.分享给大家供大家参考,具体如下: REMatch.java: package reMatch; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by Frank */ public class REMatch { public static void main(String[] args) { String patt = "Q[^

  • 正则表达式匹配${key}并在Java中使用的详细方法

    1.正则表达式匹配${key} \$\{([a-z]+)\} 能够匹配字符串中以${key}形式的文本(其中key为小写英文字母) .*\$\{([a-z]+)\}.* 可以用来检测文本中是否有${key}形式的文本 解释如下: . 匹配除换行符\n之外的任何单字符 * 匹配前面的子表达式零次或多次 要匹配*字符,请使用\* { 标记限定符表达式的开始.要匹配 {,请使用 \{ [a-z] 匹配小写字母 +匹配前面的子表达式一次或多次.要匹配+字符,请使用\+;+限定是贪婪的,因为它们会尽可能多

随机推荐