Tôi muốn biết nếu có phần mềm, được đưa ra một regex và tất nhiên một số ràng buộc khác như độ dài, tạo văn bản ngẫu nhiên luôn khớp với regex đã cho. Cảm ơnTrình tạo văn bản ngẫu nhiên dựa trên regex
Trả lời
Xeger có khả năng làm việc đó:
String regex = "[ab]{4,6}c";
Xeger generator = new Xeger(regex);
String result = generator.generate();
assert result.matches(regex);
Thay vì bắt đầu từ regexp, bạn nên xem xét việc viết ngữ cảnh nhỏ miễn phí, điều này sẽ cho phép bạn dễ dàng tạo văn bản ngẫu nhiên như vậy. Thật không may, tôi biết không có công cụ mà sẽ làm điều đó trực tiếp cho bạn, vì vậy bạn sẽ cần phải làm một chút mã của mình để thực sự tạo ra các văn bản. Nếu bạn chưa từng làm việc với các trình xử lý ngữ pháp trước đây, tôi khuyên bạn nên đọc một chút về định dạng bnf và "trình biên dịch trình biên dịch" trước khi tiến hành ...
Tôi không biết bất kỳ điều gì, mặc dù có thể. Cách tiếp cận thông thường là viết một ngữ pháp thay vì một biểu thức chính quy, và sau đó tạo ra các chức năng cho mỗi thiết bị đầu cuối không ngẫu nhiên quyết định sản xuất nào sẽ mở rộng. Nếu bạn có thể đăng mô tả về các loại chuỗi mà bạn muốn tạo và ngôn ngữ bạn đang sử dụng, chúng tôi có thể giúp bạn bắt đầu.
Chúng tôi đã làm điều gì đó tương tự bằng Python không quá lâu trước đây cho một RegEx game mà chúng tôi đã viết. Chúng tôi đã có ràng buộc rằng regex phải được tạo ngẫu nhiên và những từ được chọn phải là những từ thực sự. Bạn có thể tải xuống trò chơi hoàn chỉnh EXE here và mã nguồn Python here.
Dưới đây là một đoạn trích:
def generate_problem(level):
keep_trying = True
while(keep_trying):
regex = gen_regex(level)
# print 'regex = ' + regex
counter = 0
match = 0
notmatch = 0
goodwords = []
badwords = []
num_words = 2 + level * 3
if num_words > 18:
num_words = 18
max_word_length = level + 4
while (counter < 10000) and ((match < num_words) or (notmatch < num_words)):
counter += 1
rand_word = words[random.randint(0,max_word)]
if len(rand_word) > max_word_length:
continue
mo = re.search(regex, rand_word)
if mo:
match += 1
if len(goodwords) < num_words:
goodwords.append(rand_word)
else:
notmatch += 1
if len(badwords) < num_words:
badwords.append(rand_word)
if counter < 10000:
new_prob = problem.problem()
new_prob.title = 'Level ' + str(level)
new_prob.explanation = 'This is a level %d puzzle. ' % level
new_prob.goodwords = goodwords
new_prob.badwords = badwords
new_prob.regex = regex
keep_trying = False
return new_prob
Kiểm tra các RandExp gói Ruby. Nó làm những gì bạn muốn, mặc dù chỉ trong một thời trang hạn chế. (Nó sẽ không hoạt động với mọi regexp có thể, chỉ có các regexps đáp ứng một số hạn chế.)
Nó được di chuyển: http://github.com/benburkert/randexp –
Tất cả các biểu thức chính quy có thể được diễn tả như ngữ pháp tự do ngữ cảnh. Và có a nice algorithm already worked out để tạo các câu ngẫu nhiên, từ bất kỳ CFG nào, có độ dài nhất định. Vì vậy, upconvert regex để một cfg, áp dụng các thuật toán, và wham, bạn đang thực hiện.
Bất kỳ triển khai nào được biết đến của bản ngã? Đây có phải là một cảnh quay dài không? – Paralife
Tôi đã triển khai thành công nó trong Perl năm trước, và nó thấy việc sử dụng 'sản xuất', vì vậy tôi có thể đã làm đúng. Phần khó nhất của quá trình này là hiểu được ký hiệu được sử dụng trong bài báo. Rõ ràng rằng rào cản và bạn vàng. –
Nếu tôi tìm ra nơi Perl là, tôi sẽ ho nó lên, nhưng không đếm trên bất cứ điều gì. –
Nếu bạn muốn có một giải pháp Javascript, thử randexp.js.
Quá trễ nhưng nó có thể giúp người mới, đây là một hữu ích java library cung cấp nhiều tính năng cho việc sử dụng regex để tạo String (thế hệ ngẫu nhiên, tạo ra chuỗi dựa trên chỉ số của nó, tạo ra tất cả chuỗi ..) check it out here.
Ví dụ:
Generex generex = new Generex("[0-3]([a-c]|[e-g]{1,2})");
// generate the second String in lexicographical order that match the given Regex.
String secondString = generex.getMatchedString(2);
System.out.println(secondString);// it print '0b'
// Generate all String that matches the given Regex.
List<String> matchedStrs = generex.getAllMatchedStrings();
// Using Generex iterator
Iterator iterator = generex.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
// it print 0a 0b 0c 0e 0ee 0e 0e 0f 0fe 0f 0f 0g 0ge 0g 0g 1a 1b 1c 1e
// 1ee 1e 1e 1f 1fe 1f 1f 1g 1ge 1g 1g 2a 2b 2c 2e 2ee 2e 2e 2f 2fe 2f 2f 2g
// 2ge 2g 2g 3a 3b 3c 3e 3ee 3e 3e 3f 3fe 3f 3f 3g 3ge 3g 3g 1ee
// Generate random String
String randomStr = generex.random();
System.out.println(randomStr);// a random value from the previous String list
Có, có tồn tại phần mềm có thể tạo ra một trận đấu ngẫu nhiên đến một regex:
- Exrex, Python
- Pxeger, Javascript
- regex-genex, Haskell
- Xeger, J ava
- Xeger, Python
- Generex, Java
- rxrdg, C#
- String::Random, Perl
- regldg, C
- paggern, PHP
- ReverseRegex, PHP
- randexp.js, Javascript
- EGRET, Python/C++
- MutRex, Java
- Fare, C#
- rstr, Python
- randexp, Ruby
- goregen, Tới
- bfgex, Java
- regexgen, Javascript
- strgen, Python
- random-string, Java
- regexp-unfolder, Clojure
- string-random, Haskell
- rxrdg, C#
- Regexp::Genex, Perl
- StringGenerator, Python
- strrand, Tới
- regen, Tới
- Rex, C#
- regexp-examples, Ruby
- 1. Tạo chuỗi ngẫu nhiên dựa trên Regex?
- 2. Tạo chuỗi ngẫu nhiên dựa trên cụm từ thông dụng
- 3. Trình tạo số ngẫu nhiên phân phối ngẫu nhiên
- 4. Số ngẫu nhiên dựa trên xác suất
- 5. Trình tạo từ ngẫu nhiên- Python
- 6. c - trình tạo số ngẫu nhiên
- 7. lấy mẫu ngẫu nhiên dựa trên các nhóm
- 8. Tạo số ngẫu nhiên trên Spartan-3E
- 9. Các thư viện hoặc công cụ để tạo văn bản ngẫu nhiên nhưng thực tế
- 10. Tạo chuỗi ngẫu nhiên
- 11. Hiểu phân bố Poisson của trình tạo số ngẫu nhiên
- 12. Tạo Số ngẫu nhiên Dựa trên Phân phối Beta bằng cách sử dụng Boost
- 13. Trình tạo số ngẫu nhiên tạo số nguyên cho Java
- 14. Tạo địa hình ngẫu nhiên
- 15. Tạo số ngẫu nhiên lớn
- 16. Trình tạo số ngẫu nhiên không đồng nhất?
- 17. Tạo ID ngẫu nhiên nhỏ
- 18. Tạo số ngẫu nhiên CUDA
- 19. Tạo chuỗi văn bản ngẫu nhiên của một mẫu nhất định
- 20. Trình tạo số ngẫu nhiên trong Haskell thread-safe?
- 21. Làm cách nào để tạo số ngẫu nhiên trên iPhone?
- 22. Có thể tạo chuỗi mẫu dựa trên mẫu regex không?
- 23. Trình tạo số ngẫu nhiên tốt cho C
- 24. câu hỏi Regex: chuỗi trận chỉ n lần trên một vị trí ngẫu nhiên
- 25. Tạo các số ngẫu nhiên theo các bản phân phối
- 26. Trình tạo số ngẫu nhiên có phân phối beta
- 27. cố gắng tìm một trình tạo số ngẫu nhiên
- 28. Trình tạo câu tiếng Anh ngẫu nhiên đơn giản
- 29. Trình tạo số giả ngẫu nhiên - Phân phối số mũ
- 30. Cách nhận số ngẫu nhiên với trình tạo sai
Câu hỏi trùng lặp: http://stackoverflow.com/questions/22115/using-regex-to-generate-strings-rather-than- match-them –