2012-07-30 134 views
0

我發現很多以字符串作爲用戶輸入併爲字符串創建正則表達式的網站。但找不到任何相同的Java庫。是否有任何可用的Java庫生成正確匹配字符串的正則表達式?用於從輸入字符串生成正則表達式的Java庫

String inputString = "ABC345"; 
String regularExpression = Something.generateRegEx(inputString); 

或類似的東西。

注意:我有一個條件,我想從用戶處取一些字符串,生成正則表達式,然後在某些數據集上匹配該模式以提取相似的模式。我創建了一個小工具,但它還不夠可靠。此外,我正在尋找一些經過良好測試的圖書館。

編輯:

請訪問txt2re.com。我想要一個執行相同功能的Java庫。

+2

你的問題不明確。輸出是什麼? – kosa 2012-07-30 14:19:22

+0

你只是想逃避輸入?看到這個問題:http://stackoverflow.com/questions/60160/how-to-escape-text-for-regular-expression-in-java和有關'報價'方法的答案。 – david 2012-07-30 14:21:49

+0

我曾經寫過一個這樣做的庫。它總是返回'。*' – Dikei 2012-07-30 14:24:19

回答

2

我認爲,txt2re.com有一個來自已知正則表達式的數據庫,因爲該工具使用日期和電子郵件格式的「日期」或「電子郵件」等語義來擴展其答案。否則,它給出一個表達式,它只驗證一個字符串,而不是「常規語言」。正則語言用正則表達式來表示,它們可以用有限狀態機來計算,但是它們是有限的詞集合(所有有限的語言都是規則的)。例如,一個簡單的語言,如:

L = { (a^n)(b^n) | n >= 0 } is not regular. (proof with pumping lemma) 

L = {ab, aabb, aaabbb,...} (not- regular) 

如果你考慮,輸入是一組無限的話(包括自然語言),然而,正則表達式無法描述所有的人。爲了生成一種語言的正則表達式,你必須首先用(TYPE-3)語法來描述它。

如果你的語言只有這樣一句話:

L = { [email protected] } 

,那麼你可以寫一個基本的編譯器遍歷字符,同時檢查它們的類型, 僞:

s = size(input) 
result = "" 
for (i = 0; i < s; i++) { 
    if input[i] is numeric 
     result += "d" 
    else if input[i] is word 
     result += "w" 
    ... 
} 
return result 
+0

感謝您的詳細解答。所以,現在還沒有這樣的庫。爲了創建這樣的庫,需要在庫中包含已知正則表達式的數據庫。儀式?感謝您的僞代碼,實際上我的當前運行代碼(解決方法)使用相同的邏輯來生成正則表達式。 – Saurabh 2012-07-31 04:42:27

-1

如果你想要找到一個匹配給定字符串的正則表達式,這是沒有意義的,因爲它存在無限數量。

。如果您想建立從一個正則表達式是從用戶輸入的模式對象,使用標準的Java API(java.util.regex.*)這樣一個相反:

Pattern p = Pattern.compile(inputString); 
+0

他想從給定的字符串獲得正則表達式。 – 2012-07-30 14:21:40

+0

@ErhanBagdemir是的,那是什麼問題? – kgautron 2012-07-30 14:25:11

+0

@MikeSamuel好的,我補充一點。 – kgautron 2012-07-30 14:25:23

2

Pattern.quote(String)返回(串)的正則表達式完全匹配指定的字符串。

+0

我剛剛使用了Pattern.quote(String),輸出是\ QABC123 \ E – Saurabh 2012-07-30 14:29:47

+1

...是的?那有什麼問題? – 2012-07-30 14:31:36

+0

@Saurabh:這是一個問題嗎?你的意見是什麼? – 2012-07-30 14:32:01