在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("生成的字符串存在重复");;
}
}
关键点说明
-
正则表达式解析:
12!@#:固定前缀.{451}:匹配任意451个字符(包括字母、数字、符号等,但不包括换行符)
-
生成逻辑:
Generex库通过解析正则表达式结构,递归生成符合规则的字符串random()方法每次生成一个随机匹配项
-
特殊字符处理:
- 生成结果中的
.会匹配所有非换行字符 - 如需包含换行符,需修改正则表达式为
(?s)12!@#.{451}(启用DOTALL模式)
- 生成结果中的
示例输出
运行后将生成10个以"12!@#"开头、后接451个随机字符的字符串,例如:
Generated string 1: 12!@#aBc...(后续451个随机字符)
Generated string 2: 12!@#3Fd...
...
注意事项
- 复杂正则表达式 :对于包含分支结构(
|)、分组捕获等复杂表达式的正则,需测试生成结果是否符合预期 - 性能问题:生成超长字符串(如本例中的451字符)时,注意内存使用
- 字符集限制:默认生成ASCII字符,如需Unicode字符需扩展正则表达式
通过此方案,可高效生成符合任意给定正则表达式规则的指定数量字符串。