0

我正在编写一个简化的 Java 编译器。我为变量名写了一个正则表达式:“(_?[a-zA-Z]+[\w]*)”

我想补充一点,名称不能是某些单词,例如 int、double、true、false...

我尝试使用 ^ ,但它不起作用。

4

3 回答 3

1

它可以用 RE 来完成,但人类编写它并不容易。将关键字视为扫描器中的标识符,然后在标记器中区分标识符与关键字。这应该容易得多。

于 2012-05-12T19:13:50.310 回答
1

我不认为这应该通过正则表达式来做到这一点,而是可以更好地使用 aHashSet<String>和 exclude 包含在集合中的标识符名称来完成。

于 2012-05-12T19:03:54.470 回答
1

^ 用于其他用途:

^ 可能出现在模式的开头,以要求匹配出现在一行的最开头。例如,^abc 匹配 abc123 但不匹配 123abc。

考虑使用 "(?!...)" :

(?!...) 是一个否定的前瞻,因为它要求指定的模式不存在。

我建议,如果不可能或太难,请改用真正的编码。有时,正则表达式可能比真正的优化代码慢得多,而且它们可能非常令人困惑,并且您可能很难找出您所写的内容有什么问题。

要尝试您的正则表达式,请查看以下内容:http: //gskinner.com/RegExr/

如需快速参考,请查看以下内容: http ://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm

于 2012-05-12T19:29:38.363 回答