You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Java代码从指定字符串生成对应的正则表达式?

实现字符串转指定风格正则表达式的Java方案

核心思路

要实现将输入字符串转换为示例中的正则表达式,核心是把连续的同类型字符(这里以小写字母为例)分组,对每组取字符的ASCII最小/最大值生成范围,再加上字符长度;非字母的特殊字符则直接转义后保留(确保正则能正确匹配原字符)。

完整代码实现

public class RegexGenerator {
    public static void main(String[] args) {
        String input = "anet.leverling@gmail.com";
        String regex = generateRegex(input);
        System.out.println(regex);
        // 输出: [a-t]{4}\.[e-v]{9}@[a-o]{5}\.[a-m]{3}
    }

    public static String generateRegex(String input) {
        StringBuilder regexBuilder = new StringBuilder();
        int length = input.length();
        int index = 0;

        while (index < length) {
            char currentChar = input.charAt(index);
            // 处理连续的小写字母段
            if (Character.isLowerCase(currentChar)) {
                int segmentStart = index;
                // 找到连续小写字母的结束位置
                while (index < length && Character.isLowerCase(input.charAt(index))) {
                    index++;
                }
                String letterSegment = input.substring(segmentStart, index);
                // 获取段内最小和最大字符
                char minChar = (char) letterSegment.chars().min().getAsInt();
                char maxChar = (char) letterSegment.chars().max().getAsInt();
                // 追加正则片段
                regexBuilder.append(String.format("[%c-%c]{%d}", minChar, maxChar, letterSegment.length()));
            } else {
                // 处理非字母字符,转义正则特殊字符
                regexBuilder.append(escapeSpecialRegexChar(currentChar));
                index++;
            }
        }
        return regexBuilder.toString();
    }

    // 转义正则表达式中的特殊字符
    private static String escapeSpecialRegexChar(char c) {
        String specialChars = ".^$*+?()|[]\\{}";
        return specialChars.indexOf(c) != -1 ? "\\" + c : String.valueOf(c);
    }
}

代码说明

  1. 字符分组:遍历字符串时,将连续的小写字母划分为单独的段,非字母字符逐个处理。
  2. 范围生成:对每个字母段,通过chars().min()和chars().max()获取段内字符的最小、最大值,生成[min-max]{length}格式的正则片段。
  3. 特殊字符转义:对.、@、*等正则特殊字符添加反斜杠转义,避免它们被当作正则语法解析。

扩展说明

如果需要支持大写字母、数字等其他字符类型,可以修改Character.isLowerCase()判断逻辑,比如加入Character.isUpperCase()或Character.isDigit()的分支处理,对应生成[A-Z]{n}或[0-9]{n}这类片段。

内容的提问来源于stack exchange,提问作者GulamMd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:35:27