根据正则表达式生成字符串

在Java中生成符合指定正则表达式的字符串,可通过第三方库如Xeger实现。以下是完整解决方案:

步骤1:添加依赖

在Maven项目中添加Xeger依赖:

xml 复制代码
<dependency>
    <groupId>com.github.mifmif</groupId>
    <artifactId>generex</artifactId>
    <version>1.0.2</version>
</dependency>

步骤2:Java代码实现

java 复制代码
import com.mifmif.common.regex.Generex;

public class CombaSysFigs {
    public static void main(String[] args) {
        String regexs = "U7cdww.{10}qwer";
        List<String> snList = new ArrayList<>();
        //处理正则字符串,防止生成特殊字符
        String regex = regexs.replaceAll("\\.\\{(\\d+)\\}", "[A-Za-z0-9]{$1}");
        Generex generex = new Generex(regex);
        for (int i = 1; i <= 10; i++) {
            String rawSn = generex.random();
            System.out.println(rawSn);
        }
        if(new HashSet<>(snList).size() == snList.size()) System.out.println("生成的字符串存在重复");;
    }
}

关键点说明

  1. 正则表达式解析

    • 12!@#:固定前缀
    • .{451}:匹配任意451个字符(包括字母、数字、符号等,但不包括换行符)
  2. 生成逻辑

    • Generex库通过解析正则表达式结构,递归生成符合规则的字符串
    • random()方法每次生成一个随机匹配项
  3. 特殊字符处理

    • 生成结果中的.会匹配所有非换行字符
    • 如需包含换行符,需修改正则表达式为(?s)12!@#.{451}(启用DOTALL模式)

示例输出

运行后将生成10个以"12!@#"开头、后接451个随机字符的字符串,例如:

复制代码
Generated string 1: 12!@#aBc...(后续451个随机字符)
Generated string 2: 12!@#3Fd...
...

注意事项

  1. 复杂正则表达式 :对于包含分支结构(|)、分组捕获等复杂表达式的正则,需测试生成结果是否符合预期
  2. 性能问题:生成超长字符串(如本例中的451字符)时,注意内存使用
  3. 字符集限制:默认生成ASCII字符,如需Unicode字符需扩展正则表达式

通过此方案,可高效生成符合任意给定正则表达式规则的指定数量字符串。

相关推荐
Watermelo6171 天前
理解 JavaScript 中的“ / ”:路径、资源与目录、nginx配置、请求、转义的那些事
前端·javascript·vue.js·chrome·nginx·正则表达式·seo
睡不着的可乐1 天前
正则表达式
正则表达式
Dxy12393102162 天前
Python 使用正则表达式将多个空格替换为一个空格
开发语言·python·正则表达式
2401_827499994 天前
python项目实战11-正则表达式基础
python·mysql·正则表达式
互联网散修4 天前
零基础鸿蒙应用开发第三十三节:正则表达式基础与应用
华为·正则表达式·harmonyos
bukeyiwanshui4 天前
20260414 正则表达式及shell三剑客
数据库·mysql·正则表达式
坐吃山猪5 天前
Python09_正则表达式
开发语言·python·正则表达式
橙露5 天前
Python 正则表达式:文本清洗与信息提取速通手册
python·正则表达式·easyui
XiaoQiao6669997 天前
pytnon中正则表达式小题详解
python·正则表达式
gCode Teacher 格码致知7 天前
Python基础教学:正则表达式中的忽略大小写以及符号“-“的问题-由Deepseek产生
python·正则表达式