具有任意正則表達式如何生成匹配(或不匹配)給定正則表達式的隨機文本序列?我對理論和實際使用感興趣(需要在.NET上下文中改進我的測試),因此我們將欣賞鏈接到文章或現有庫。看它生成與給定正則表達式匹配的隨機序列
4
A
回答
3
從純理論的角度來看,正則表達式是等效於理性語言,這是在以下基礎上構建:
{}
(無字的語言)是合理的。{a}
(使用單一一個字的字母語言)是合理的。- 如果
L
和M
是兩種理性語言,那麼它們的聯合(L
或M
中的詞)是合理的。 - 如果
L
和M
兩種理性語言,那麼它們的級聯LM
(通過從前面加上M
從L
一個單詞到字構造的話)也是合理的。 - 如果
L
是一種合理的語言,那麼L*
(通過連接來自語言L
的任何數量的詞構造的詞)也是合理的。
此建設性的方法補充了正則表達式識別/匹配方法,並且有助於構建遞歸與表達式匹配的話:
make({}) = ""
make({a}) = "a"
make(A|B) = flip-coin ? make(A) : make(B)
make(AB) = make(A) + make(B)
make(A*) = flip-coin ? "" : make(A) + make(A*)
1
的一種方式是,每一個正則表達式(我相信)被表示爲一個有限狀態機中的狀態之間的每個過渡由消耗一個或多個字符(或者零字符也是有效的?龍自從我研究這個以來的時間)。
所以,去了解這一個辦法是想或正則表達式轉換成有限狀態機和狀態移動到狀態,隨機選擇的轉變,直到你打一個有效的最終狀態。
當然,我不知道這個方法實際上是如何可行的是代碼,或任何這樣的庫是否存在。
http://lara.epfl.ch/dokuwiki/equivalence_of_finite_state_machine_and_regular_expression_languages
0
雖然不是.NET但也很有趣。找到this implementation in Haskell。作者聲稱它比CPAN Genex更強大。
1
在.NET中,你可能也想看看項目Fare。它完全符合你的描述。
這裏是如何使用它:
var xeger = new Xeger(pattern);
var match = xeger.Generate();
Regex.IsMatch(match, pattern);
// Prints -> true
既然你提到的單元測試,你也可以考慮使用AutoFixture曾經你裝飾一個屬性(或字段)的[RegularExpression]屬性將分配與正則表達式匹配的值。
1
相關問題
- 1. 隨機生成器匹配正則表達式?
- 2. 正則表達式與序列匹配
- 3. 隨機序列生成的正則表達式分離器
- 4. 匹配列表與正則表達式
- 5. 正則表達式匹配成才與
- 6. grep正則表達式與隨機中間字符匹配
- 7. 正則表達式序列匹配
- 8. 與正則表達式匹配的正則表達式
- 9. Mysql的正則表達式:匹配與正則表達式
- 10. 正則表達式:與隨機順序屬性匹配的<tag>
- 11. 正則表達式與給定的URL匹配
- 12. 查找與給定正則表達式不匹配的字符
- 13. Ruby正則表達式與正則表達式匹配
- 14. 的javascript:匹配與正則表達式
- 15. 正則表達式匹配產生假
- 16. 從Python成功的正則表達式匹配生成字典
- 17. Pymongo正則表達式匹配列表
- 18. 匹配正則表達式的特定序列?
- 19. 基於正則表達式的隨機字符串生成-python
- 20. Vim用隨機生成的數字替換正則表達式
- 21. 基於正則表達式的隨機文本生成器
- 22. 正則表達式匹配
- 23. 正則表達式匹配
- 24. 正則表達式匹配%
- 25. 正則表達式匹配
- 26. 正則表達式匹配
- 27. 正則表達式 - 匹配
- 28. 正則表達式匹配
- 29. 匹配正則表達式
- 30. 正則表達式 - 匹配
我不知道一個合適的.NET庫,但嘗試在StackOverflow中搜索「xeger」;這可能會給你一些指示。 xeger是一個Java庫,用於從給定的正則表達式中生成字符串。 – 2010-12-06 07:52:11