需要自动确定将导致正则表达式匹配的文本

时间:2015-03-02 18:46:20

标签: regex

我需要提供自动匹配正则表达式的文本。

例如,给定正则表达式:[Tt]rue 我需要生成Truetrue

我只需要为每个Regex生成一个有效匹配,希望这对于Regex可能带来的无限可能性来说是一个更容易解决的问题。

由于构建了正则表达式,我不确定这是否可行。另外,我不确定我会搜索什么。更常见的问题是“反转”。一场比赛往往会淹没我的问题。

如果重要,我使用C#。如果解决方案需要其他技术,那也很好。

答案: 我被指向Xeger,这是一个Java库,它让我: https://github.com/moodmosaic/Fare 这是Xeger的C#端口和Xeger使用的dk.brics.automaton。

1 个答案:

答案 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)

我认为您应该测试简单的正则表达式并逐步添加更复杂的功能,以便找出它是否有助于您生成数据