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

在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字符需扩展正则表达式

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

相关推荐
长城20245 天前
HTML5中表单的pattern属性解析
前端·正则表达式·html·html5·pattern·pattern属性·pattern正则表达式
Gss7775 天前
Linux 正则表达式详解(基础 + 扩展 + 实操)
linux·运维·正则表达式
黑客思维者5 天前
正则表达式(九)网络安全:检测SQL注入攻击 + 检测XSS跨站脚本 + 扫描敏感信息泄露 + 匹配暴力破解异常IP
sql·web安全·正则表达式
黎雁·泠崖5 天前
Java常用类核心详解(七):正则表达式 Regex 从入门到实战
java·开发语言·正则表达式
秀儿还能再秀5 天前
正则表达式核心语法 + Python的 re 库中常用方法
python·正则表达式
xcLeigh5 天前
Python入门:Python3 正则表达式全面学习教程
python·学习·正则表达式·教程·python3
数据知道6 天前
MongoDB 正则表达式查询:在 MongoDB 中实现模糊搜索与索引优化陷阱
数据库·mongodb·正则表达式
A懿轩A6 天前
【Java 基础编程】Java 正则表达式实战:Pattern/Matcher、元字符与常用正则,验证与提取必备
java·开发语言·正则表达式
石牌桥网管6 天前
正则表达式:匹配不包含指定字符串的文本
java·javascript·python·正则表达式·go·php