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

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

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

相关推荐
IT陈图图16 小时前
基于 Flutter × OpenHarmony 的正则表达式测试器开发实战
flutter·正则表达式·openharmony
不平衡的叉叉树3 天前
我们遇到了正则表达式的灾难性回溯问题
java·正则表达式
Meteors.3 天前
正则表达式及其常见使用(Kotlin版)
正则表达式
至此流年莫相忘3 天前
正则表达式之捕获分组——Python篇
python·正则表达式
西红市杰出青年3 天前
crawl4ai------AsyncPlaywrightCrawlerStrategy使用教程
开发语言·python·架构·正则表达式·pandas
噎住佩奇4 天前
正则表达式(Regex)入门
运维·正则表达式
Irene19914 天前
JavaScript 正则表达式 API 总结
正则表达式
linuxxx1105 天前
正则匹配应用小案例
数据库·正则表达式
威风的虫5 天前
常用的正则表达式
正则表达式
Lv11770085 天前
Visual Studio中的正则表达式
ide·笔记·正则表达式·c#·visual studio