如何编写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); } }
代码说明
- 字符分组:遍历字符串时,将连续的小写字母划分为单独的段,非字母字符逐个处理。
- 范围生成:对每个字母段,通过
chars().min()和chars().max()获取段内字符的最小、最大值,生成[min-max]{length}格式的正则片段。 - 特殊字符转义:对
.、@、*等正则特殊字符添加反斜杠转义,避免它们被当作正则语法解析。
扩展说明
如果需要支持大写字母、数字等其他字符类型,可以修改Character.isLowerCase()判断逻辑,比如加入Character.isUpperCase()或Character.isDigit()的分支处理,对应生成[A-Z]{n}或[0-9]{n}这类片段。
内容的提问来源于stack exchange,提问作者GulamMd
相关产品推荐
相关产品推荐

