我需要在大学里构建某种“java 语法”编译器。 我想使用正则表达式来匹配变量类型和变量名称(int num 、 String str 等)。 所以我需要正则表达式来匹配其中一种 var 类型(String、int、char、boolean、double),然后至少有一个空格和 var 名称,但是 var name CAN NOT 是其中之一类型。 我怎么做?我试过:
(String|int|char|boolean|double)[\s]+([a-zA-Z]+[\w]*^(String|int|char|boolean|double))
我知道它不是 Java 正则表达式语法(只有一个 '\' 而不是两个),但我在 http://regexpal.com/ 中试过了它不起作用。
非常感谢!
最佳答案
负面前瞻
^
将无法在您拥有它的地方工作(它是一个 anchor ,试图断言我们在字符串的开头)。但是你已经很接近了,如果你只是在后面的 ethe 括号的开头添加 ?!
,它就会变成一个负前瞻:
(String|int|char|boolean|double)\s+(?!(?:String|int|char|boolean|double)\b)[a-zA-Z]+
- 删除了
\s
和\w
的括号(不需要)。 - 负向回顾
(?!(?:String|int|char|boolean|double)\b)
断言后面的不是您的类型之一。如果断言成功,引擎将继续匹配您的 var,由[a-zA-Z]+
指定
- 有关环顾四周的更多信息,请参阅引用部分。
引用
关于java - 如何不在正则表达式中包含特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24259358/