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

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

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

相关推荐
Patrick在香港21 小时前
Python正则表达式实战:解析和验证香港身份证、车牌、电话格式
开发语言·python·正则表达式
吴声子夜歌3 天前
正则指引——Ruby
开发语言·正则表达式·ruby
吴声子夜歌3 天前
正则指引——Golang
开发语言·golang·正则表达式
吴声子夜歌4 天前
正则指引——PHP
开发语言·正则表达式·php
吴声子夜歌6 天前
正则指引——断言
正则表达式
吴声子夜歌6 天前
正则指引——匹配原理
java·正则表达式
吴声子夜歌7 天前
正则表达式——环视
开发语言·正则表达式
吴声子夜歌8 天前
正则表达式——边界
正则表达式
营养充电站8 天前
C++23 新特性在 CLion 中的实战体验
macos·docker·jupyter·正则表达式