2013-07-08 20 views
7

我使用正則表達式來驗證用戶輸入。現在我可以配置正則表達式,因此它可以幫助用戶查看某個特定輸入如何格式化的示例。C#代碼來生成匹配正則表達式的字符串

是否有可能生成一些匹配任意正則表達式的字符串?甚至有一個實現可用的地方?

更新: 由於許可證我不能使用REX。還有其他可能性嗎?

+1

我建議你看看:http://research.microsoft.com/en-us/projects/rex/,他們做了這樣的事情。請讓我知道這對你有沒有用。 –

+1

看看這個網站:http://debuggex.com。輸入你想要的任何正則表達式,然後看看「一些隨機匹配」部分。當您的正則表達式開始變得複雜時,您可能會感到驚訝。 – Stephan

+0

'。*'可能產生什麼? – Toto

回答

6

嘗試使用這個應用程序雷克斯能做到這一點:)

http://research.microsoft.com/en-us/projects/rex/

對於Java這是 https://code.google.com/p/xeger/

所以有很多的正則表達式匹配發電機:)

這: https://github.com/moodmosaic/Fare

這是xeger在C#包裝

在評論中指定
+0

雷克斯很酷,但由於許可證,我無法使用它。 – schoetbi

+1

@schoetbi我發現這個https://github.com/moodmosaic/Fare它是C#中xeger的包裝,試試這個:) – wudzik

+0

票價看起來不錯,它包含一個Xeger端口。我會試一試 – schoetbi

0

幾乎肯定不是,不。

在您查看的上下文中,通常使用正則表達式來檢查字符串是否與給定格式相匹配。如果你知道你的格式應該足夠好以至於你正在寫一個正則表達式,那麼你應該沒有理由不能輕易地生成你自己的測試數據。

[編輯 - 它似乎有一些例子。但是這確實忽略了這樣一個事實,爲了測試你的正則表達式是否正確,你必須已經寫好了測試數據。所以,你應該已經有你的字符串。]

+0

我認爲應該有可能在.net中有類似regexparser的類,而不是檢查規則,爲正則表達式中的每個標記挑選一個有效字符的示例,並將其附加到示例字符串中。 – schoetbi

+0

在你描述的情況下,你提供了用來驗證數據的表達式。所以你肯定知道這些數據,首先寫出這個表達式? –

+0

否用戶尚未輸入要匹配的字符串。我想給他介紹一些有效的例子。 – schoetbi

1

,獺工具會做的伎倆 -

使用雷克斯創建符合模式的字符串:如下

運行rex.exe

rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here 

對此的詳細信息:Rex Guide

2

一些解決方案:

(1)如果正則表達式是由您(而不是由用戶)編寫的並且很少發生更改,爲什麼以編程方式創建任何東西?你可以手工創建一些很好的例子。

(2)使用現成的解決方案。 (看到其他答案)

(3)Rejection sampling,大錘解決所有隨機生成問題:創建一個隨機字符串,並檢查它是否匹配正則表達式。如果不是,請再試一次。如果正則表達式非常具體,那麼這個解決方案的性能很差。 (4)實現將正則表達式轉換爲字符串構造樹的解析器,該構造樹例如由以下構成:下面的節點。每個節點都有一個遵循特定規則的CreateRandomString方法。創建一個隨機字符串意味着爲根節點調用該方法。

concatenation:遍歷所有子子樹並按順序連接結果。

隨機選擇:選擇一個隨機的子樹並遍歷它。返回結果。

乘法:在a和b之間創建一個隨機數n。遍歷子樹n次並連接結果。

:返回一個常量字符串。

創建解析器是一個棘手的部分:),尤其是嵌套結構。 (我寫了一個類似於正則表達式的語法。)

+0

由於.net框架的正則表達式解析器是純管理的,因此我會討論數字4。但後來我發現票價相當不錯。正則表達式的變化,有幾個,他們也可以由用戶配置(不是終端用戶);) – schoetbi

相關問題