我需要提供自动匹配正则表达式的文本。
例如,给定正则表达式:[Tt]rue
我需要生成True
或true
。
我只需要为每个Regex生成一个有效匹配,希望这对于Regex可能带来的无限可能性来说是一个更容易解决的问题。
由于构建了正则表达式,我不确定这是否可行。另外,我不确定我会搜索什么。更常见的问题是“反转”。一场比赛往往会淹没我的问题。
如果重要,我使用C#。如果解决方案需要其他技术,那也很好。
答案: 我被指向Xeger,这是一个Java库,它让我: https://github.com/moodmosaic/Fare 这是Xeger的C#端口和Xeger使用的dk.brics.automaton。
答案 0 :(得分:5)
您可以使用 Xeger (用于从正则表达式生成随机文本的Java库)来实现此目的
从文档中可以看出:
将其视为正则表达式匹配器的反义词。 :此 库允许您生成保证匹配a的文本 传递正则表达式。
让我们采用正则表达式:
[ab] {4,6} c
使用Xeger,您现在可以 生成匹配此模式的字符串,如下所示:
String regex = "[ab]{4,6}c";
Xeger generator = new Xeger(regex);
String result = generator.generate();
assert result.matches(regex);
Xeger网站还建议检查其局限性。在这里,您可以找到他们通过限制定义的内容:
regexp ::= unionexp
|
unionexp ::= interexp | unionexp (union)
| interexp
interexp ::= concatexp & interexp (intersection) [OPTIONAL]
| concatexp
concatexp ::= repeatexp concatexp (concatenation)
| repeatexp
repeatexp ::= repeatexp ? (zero or one occurrence)
| repeatexp * (zero or more occurrences)
| repeatexp + (one or more occurrences)
| repeatexp {n} (n occurrences)
| repeatexp {n,} (n or more occurrences)
| repeatexp {n,m} (n to m occurrences, including both)
| complexp
complexp ::= ~ complexp (complement) [OPTIONAL]
| charclassexp
charclassexp ::= [ charclasses ] (character class)
| [^ charclasses ] (negated character class)
| simpleexp
charclasses ::= charclass charclasses
| charclass
charclass ::= charexp - charexp (character range, including end-points)
| charexp
simpleexp ::= charexp
| . (any single character)
| # (the empty language) [OPTIONAL]
| @ (any string) [OPTIONAL]
| " <Unicode string without double-quotes> " (a string)
| ( ) (the empty string)
| ( unionexp ) (precedence override)
| < <identifier> > (named automaton) [OPTIONAL]
| <n-m> (numerical interval) [OPTIONAL]
charexp ::= <Unicode character> (a single non-reserved character)
| \ <Unicode character> (a single character)
我认为您应该测试简单的正则表达式并逐步添加更复杂的功能,以便找出它是否有助于您生成数据