2010-06-28 22 views
14

Uygulamamda, kullanıcı kendi regex desenini bir metin kutusuna girebilir, böylece başka bir kullanıcı/metin kutusu için belirli bir girişi zorlayabilir. Kullanıcının girdiği normal ifadeyle eşleşecek bir dizi örneği görmesi mümkün mü? Örneğin, ^[A-Z]{2}$ numarasını girerse, kullanıcıya yalnızca iki büyük harf girebileceğini göstermek için "XX" gibi bir dize oluşturacaktır.Bir regex modeline dayalı örnek bir dize oluşturmak mümkün mü?

Bunu gerçekleştirmenin kolay bir yolu yoksa (ve varsayacağımı varsayalım), bunun oluşturulması ne kadar zor olurdu? Yoksa böyle bir şey zaten var mı?

+0

http://stackoverflow.com/questions/205411/random-string-that-matches-a-regexp adresine bakın, size yardımcı olabilir. – Shimrod

cevap

8

atın Xeger. İstediğin şeyi yapabilir gibi görünüyor. Java'da olsa da. İşte

test paketi dan bir örnek:

@Test 
    public void shouldGenerateTextCorrectly() { 
     String regex = "[ab]{4,6}c"; 
     Xeger generator = new Xeger(regex); 
     for (int i = 0; i < 100; i++) { 
      String text = generator.generate(); 
      assertTrue(text.matches(regex)); 
     } 
    } 

Güncelleme: Nikos Baxevanis sayesinde dk.brics.automaton C# için https://github.com/moodmosaic/Fare

+0

Tam olarak aradığım şey bu .. C# için. En azından referans olarak kullanabileceğim bir şey var. – Fusyion

+0

Xeger, bazı regexp işlemlerinin DFA/NFA uygulaması olan http://www.brics.dk/~amoeller/automaton/ adresindeki ince bir paketleyicidir. Belki bir yerde C# için bir şey var mı? –

+1

@MartinWickman Evet, hem dk.brics.automaton hem de xeger kaynakları, https://github.com/moodmosaic/Fare –

7

de C# için de geliştirilmektedir Ayrıca proje Fare bakmak isteyebilirsiniz. Daha fazla ayrıntı için this cevabına bakınız.

Örnek

var regex = @"((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)"; 
var xeger = new Xeger(regex); 

var result = Regex.IsMatch(xeger.Generate(), regex); 
// -> Prints 'true' 
+0

Nikos adresinde C# adresine taşındı, Ücret –

+0

'u kullanarak bir kod örneğini gösterirseniz çok yararlı olur Alberto, bir örnek ekledim. Umarım yardımcı olur. –

0

keresinde gerekli bir şey de, bu yüzden yukarıda bahsedilen xeger lib kullanarak grafiksel arayüz ile basit bir program oluşturdu. Sadece dist klasöründen çalıştırın (jre gereklidir) https://github.com/ogyct/SampleFromRegex

İlgili konular