2009-12-19 45 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