代码之家  ›  专栏  ›  技术社区  ›  Daniel Spiewak

我可以确定正则表达式模式匹配的第一个字符集吗?

  •  4
  • Daniel Spiewak  · 技术社区  · 17 年前

    第一 字符串中的字符由给定的实例表示 java.util.regex.Pattern 更正式地说,给定DFA等价于某个正则表达式,我想要从开始状态开始的所有传出转换的集合。

    举个例子:

    Pattern p = Pattern.compile("[abc]def|daniel|chris|\\s+");
    Set<Character> first = getFirstSet(p);
    

    集合 first 应包含以下元素:

    { 'a', 'b', 'c', 'd', ' ', '\n', '\r', '\t' }
    

    2 回复  |  直到 17 年前
        1
  •  4
  •   Tetha    17 年前

    我认为你可以解析正则表达式,并定义一些递归函数,以从左到右的方式对解析后的正则表达式进行操作,从而建立这样一组第一。

    • 迭代:第一(r*)=第一(r)+“”
    • 字符:第一个(c)=c
    • 字符类:第一个([c1 cn])=集合(c1,c2,…,cn)

        2
  •  1
  •   Daniel Brückner    17 年前

    你可以反复解决它。..

    • 去掉括号并递归调用。
      • 输出从左侧开始到第一个非可选符号的所有符号。
      • 如果有字符组,则输出所有符号。