我使用正則表達式來驗證用戶輸入。現在我可以配置正則表達式,因此它可以幫助用戶查看某個特定輸入如何格式化的示例。C#代碼來生成匹配正則表達式的字符串
是否有可能生成一些匹配任意正則表達式的字符串?甚至有一個實現可用的地方?
更新: 由於許可證我不能使用REX。還有其他可能性嗎?
我使用正則表達式來驗證用戶輸入。現在我可以配置正則表達式,因此它可以幫助用戶查看某個特定輸入如何格式化的示例。C#代碼來生成匹配正則表達式的字符串
是否有可能生成一些匹配任意正則表達式的字符串?甚至有一個實現可用的地方?
更新: 由於許可證我不能使用REX。還有其他可能性嗎?
嘗試使用這個應用程序雷克斯能做到這一點:)
http://research.microsoft.com/en-us/projects/rex/
對於Java這是 https://code.google.com/p/xeger/
所以有很多的正則表達式匹配發電機:)
這: https://github.com/moodmosaic/Fare
這是xeger在C#包裝
在評論中指定幾乎肯定不是,不。
在您查看的上下文中,通常使用正則表達式來檢查字符串是否與給定格式相匹配。如果你知道你的格式應該足夠好以至於你正在寫一個正則表達式,那麼你應該沒有理由不能輕易地生成你自己的測試數據。
[編輯 - 它似乎有一些例子。但是這確實忽略了這樣一個事實,爲了測試你的正則表達式是否正確,你必須已經寫好了測試數據。所以,你應該已經有你的字符串。]
,獺工具會做的伎倆 -
使用雷克斯創建符合模式的字符串:如下
運行rex.exe
:
rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here
對此的詳細信息:Rex Guide
一些解決方案:
(1)如果正則表達式是由您(而不是由用戶)編寫的並且很少發生更改,爲什麼以編程方式創建任何東西?你可以手工創建一些很好的例子。
(2)使用現成的解決方案。 (看到其他答案)
(3)Rejection sampling,大錘解決所有隨機生成問題:創建一個隨機字符串,並檢查它是否匹配正則表達式。如果不是,請再試一次。如果正則表達式非常具體,那麼這個解決方案的性能很差。 (4)實現將正則表達式轉換爲字符串構造樹的解析器,該構造樹例如由以下構成:下面的節點。每個節點都有一個遵循特定規則的CreateRandomString
方法。創建一個隨機字符串意味着爲根節點調用該方法。
concatenation:遍歷所有子子樹並按順序連接結果。
隨機選擇:選擇一個隨機的子樹並遍歷它。返回結果。
乘法:在a和b之間創建一個隨機數n。遍歷子樹n次並連接結果。
葉:返回一個常量字符串。
創建解析器是一個棘手的部分:),尤其是嵌套結構。 (我寫了一個類似於正則表達式的語法。)
由於.net框架的正則表達式解析器是純管理的,因此我會討論數字4。但後來我發現票價相當不錯。正則表達式的變化,有幾個,他們也可以由用戶配置(不是終端用戶);) – schoetbi
我建議你看看:http://research.microsoft.com/en-us/projects/rex/,他們做了這樣的事情。請讓我知道這對你有沒有用。 –
看看這個網站:http://debuggex.com。輸入你想要的任何正則表達式,然後看看「一些隨機匹配」部分。當您的正則表達式開始變得複雜時,您可能會感到驚訝。 – Stephan
'。*'可能產生什麼? – Toto