2009-12-19 70 views
0

背景:我正在開發一個自定義類正則表達式的URL文件的語法。它的工作是這樣的:解析自定義的字符串生成模式語法

  • 用戶寫入的模式,像"[a-z][0-9]{0,2}"的東西,並把它作爲輸入
  • 它是由程序解析並翻譯成組排列的它即代表
    'a''a0''a00' ... 'z99'

這些模式將在複雜性,基本上任何可能出現在URL文件名必須適應。該語言是Java或PHP,但任何語言或抽象/概念上的幫助都非常受歡迎。

我的問題是:

  1. 哪裏開始以 「分析器」 的實施對上述

和同樣重要的是,

  • 如何將編譯後的複雜圖案轉換爲字符串
  • +0

    你能詳細說明爲什麼正則表達式不適合這個問題嗎? – GrayWizardx 2009-12-19 02:33:24

    +0

    這是非常有趣和困難的問題。這是一個Ruby測驗的主題:http://rubyquiz.com/quiz143.html。我喜歡的Ruby的一個特點是例如('a'..'zzzzz')。each {| x | puts x}打印所有大小爲1到5的小寫字母組合。 – mykhal 2009-12-19 03:08:18

    +0

    @GrayWizardx您如何使用正則表達式算法的排列部分? – axada 2013-06-11 03:51:42

    回答

    0

    這是一個很好的回答這個位置: SO: /generate-all-permutations-of-text-from-a-regex-pattern-in-c

    的事情的關鍵是這個...定義你真正需要的好,想出一個辦法來制止,一旦你有你需要什麼,儘可能縮小您的搜索範圍,因爲您正在調整快速爆炸式的排列組合。 「任何可能出現在URL文件名中的東西都必須適用。」不會削減它。例如,如果您將自己限制爲英文字符和數字,對於長度爲6個字符的字符串,您正在查看超過20億個組合。對於每個附加字符乘以36.
    如果使用ISO 8859,則可以獲得超過274萬億個組合和Unicode超過745萬億億個組合。

    +0

    謝謝你的回答,並且只有4年的時間才接受它。關於排列數量的爆炸,用戶需要定義要生成的字符集,從而控制排列集的大小。這個想法是構建一個大型的URL「語料庫」,並計算任何給定角色出現在某處/某處的概率,並從那裏開始工作,或許有一個概率閾值,低於該概率閾值時,字符不會包含在排列中。這是一個我還沒有完成的寵物項目。 – axada 2013-06-11 04:07:55