如何编写符合所需模式且不适合其他模式的正则表达式?

时间:2012-05-12 19:03:00

标签: java regex

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

我想补充一点,这个名字不能是某些单词,比如int,double,true,false ......

我尝试使用^,但它无效。

3 个答案:

答案 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