我需要一个涵盖以下所有scenrios的变量的通用正则表达式模式:
变量名不能以数字开头,如果以_开头,则之后必须有另一个字母。
我的正则表达分开:
"(最终)\ S +" + RESERVED_TYPE_KEYWORDS +" \ s +(" + VARIABLE_NAME +" \ s + = \ s +" + VALUE +" |" + VARIABLE_NAME +")+ ;"
"(" + RESERVED_TYPE_KEYWORDS + VARIABLE_NAME +"(\ s + = \ s +" + VALUE +" |" + VARIABLE_NAME + "))+;?"
"(" + VARIABLE_NAME +" \ s + = \ s +" + VALUE +" |" + VARIABLE_NAME +&#34 ;)+;"
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)"
提前致谢!
答案 0 :(得分:0)
实际答案是Maciej Kozieja:
不要尝试正则表达式,使用由标记化器提供的语法树。
我只是添加了一些推理(顺便提一下聊天),
帮助您理解原因:
请理解你似乎正在尝试的(找到编程语言语法的某些部分)是我已经尝试过的(尽管有C)。
它不仅仅适用于正则表达式。
你需要运用各种背景知识
这会让你获得一个语法树
为了提供语法树,一个几乎不可避免的方法是标记化器。
另一方面,我没有那么讽刺 如果您获得所有占位符的正则表达式,您可能可以自己覆盖您的变量。 找到那些正则表达式(我承认我认为)将需要我与语法树相关联的上下文感知。
但是如果你只是解析非常重复的代码,并且总是很相似,你可能会做出很多假设,这反过来又可以让你真正与正则表达式相处。
(我也做到了 - 甚至成功。但是我应该提到我只是在经历了许多痛苦的迭代之后才成功“哦,我忘记了那个特殊情况。”如果不得不再次做同样的工作,我可能会开始使用tokenizer提供一个语法树。或者通过我最喜欢的搜索引擎寻找为我做的事情。)
为此,了解所有可能的输入非常重要,并且为了获得解决方案,您必须提供所有样本输入。
这种情况(基于许多假设的正则表达式)也包含给占位符的正则表达式,因为它定义了您允许的灵活性范围。 然而,只有一个被这些假设所焚烧的人变成了一个人:你真的必须考虑样本输入中的所有可能性。