我正在编写一个简化的 Java 编译器。我为变量名写了一个正则表达式:“(_?[a-zA-Z]+[\w]*)”
我想补充一点,名称不能是某些单词,例如 int、double、true、false...
我尝试使用 ^ ,但它不起作用。
它可以用 RE 来完成,但人类编写它并不容易。将关键字视为扫描器中的标识符,然后在标记器中区分标识符与关键字。这应该容易得多。
我不认为这应该通过正则表达式来做到这一点,而是可以更好地使用 aHashSet<String>
和 exclude 包含在集合中的标识符名称来完成。
^ 用于其他用途:
^ 可能出现在模式的开头,以要求匹配出现在一行的最开头。例如,^abc 匹配 abc123 但不匹配 123abc。
考虑使用 "(?!...)" :
(?!...) 是一个否定的前瞻,因为它要求指定的模式不存在。
我建议,如果不可能或太难,请改用真正的编码。有时,正则表达式可能比真正的优化代码慢得多,而且它们可能非常令人困惑,并且您可能很难找出您所写的内容有什么问题。
要尝试您的正则表达式,请查看以下内容:http: //gskinner.com/RegExr/
如需快速参考,请查看以下内容: http ://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm