变量

时间:2017-06-17 09:19:40

标签: java regex

我需要一个涵盖以下所有scenrios的变量的通用正则表达式模式:

  1. final type variable_name = value,b = value; // final String a ="嗨&#34 ;;
  2. type variable_name = value,b; // char a =' c'
  3. variable_name = value; // a = false;
  4. type variable_name; // int a;
  5. 变量名不能以数字开头,如果以_开头,则之后必须有另一个字母。

    我的正则表达分开:

    1. "(最终)\ S +" + RESERVED_TYPE_KEYWORDS         +" \ s +(" + VARIABLE_NAME +" \ s + = \ s +" + VALUE +" |" + VARIABLE_NAME +")+ ;"

    2. "(" + RESERVED_TYPE_KEYWORDS + VARIABLE_NAME +"(\ s + = \ s +" + VALUE +" |" + VARIABLE_NAME + "))+;?"

    3. "(" + VARIABLE_NAME +" \ s + = \ s +" + VALUE +" |" + VARIABLE_NAME +&#34 ;)+;"

    4. RESERVED_TYPE_KEYWORDS +" \ s +" + VARIABLE_NAME +" +;"

      RESEREVED_TYPE_KEYWORD ="(int | double | boolean | char | String)"

      VARIABLE_NAME ="(_ {1} \ w +)|([a-zA-Z] {1} \ w *)"

      VALUE = BOOLEAN +" |" + CHAR +" |" + STRING

      BOOLEAN ="(false | true)" +" |" + DOUBLE

      DOUBLE ="(" + INT +" \。" + INT +")" +" |" +"(" + INT +")"

      INT ="([ - ]?[1-9] \ d * | 0)"

    5. 提前致谢!

1 个答案:

答案 0 :(得分:0)

实际答案是Maciej Kozieja:
不要尝试正则表达式,使用由标记化器提供的语法树。

我只是添加了一些推理(顺便提一下聊天),
帮助您理解原因:

请理解你似乎正在尝试的(找到编程语言语法的某些部分)是我已经尝试过的(尽管有C)。
它不仅仅适用于正则表达式。 你需要运用各种背景知识 这会让你获得一个语法树 为了提供语法树,一个几乎不可避免的方法是标记化器。

另一方面,我没有那么讽刺 如果您获得所有占位符的正则表达式,您可能可以自己覆盖您的变量。 找到那些正则表达式(我承认我认为)将需要我与语法树相关联的上下文感知。

但是如果你只是解析非常重复的代码,并且总是很相似,你可能会做出很多假设,这反过来又可以让你真正与正则表达式相处。
(我也做到了 - 甚至成功。但是我应该提到我只是在经历了许多痛苦的迭代之后才成功“哦,我忘记了那个特殊情况。”如果不得不再次做同样的工作,我可能会开始使用tokenizer提供一个语法树。或者通过我最喜欢的搜索引擎寻找为我做的事情。) 为此,了解所有可能的输入非常重要,并且为了获得解决方案,您必须提供所有样本输入。

这种情况(基于许多假设的正则表达式)也包含给占位符的正则表达式,因为它定义了您允许的灵活性范围。 然而,只有一个被这些假设所焚烧的人变成了一个人:你真的必须考虑样本输入中的所有可能性。