我正在编写一个简化的Java编译器。我为变量名写了一个正则表达式: “(_?[A-ZA-Z] + [\ W] *)”
我想补充一点,这个名字不能是某些单词,比如int,double,true,false ......
我尝试使用^,但它无效。
答案 0 :(得分:1)
我不认为这应该通过正则表达式来实现,而是可以使用HashSet<String>
更好地完成,并排除集合中包含的标识符名称。
答案 1 :(得分:1)
可以使用RE完成,但人类编写它并不容易。将关键字视为扫描程序中的标识符,然后区分标记化程序中的标识符与关键字。这应该是非常容易的。
答案 2 :(得分:1)
^用于其他内容:
^可能出现在模式的开头,需要匹配 发生在一条线的最开始。例如,^ abc匹配 abc123但不是123abc。
考虑使用“(?!...)”:
(?!...)是一个负向前瞻,因为它需要 指定的模式不存在。
我建议如果不可能或太难,请转而使用真正的编码。有时,正则表达式可能比实际的优化代码慢得多,并且它们可能非常混乱,并且您可能在查找已编写内容时出现问题时遇到问题。
尝试使用正则表达式,请检查以下内容: http://gskinner.com/RegExr/
快速参考,请检查以下内容: http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm