匹配有效Java标识符的Java正则表达式
我需要创建一个正则表达式,能够在Java代码中找到并获取有效标识符,如下所示:匹配有效Java标识符的Java正则表达式,java,regex,Java,Regex,我需要创建一个正则表达式,能够在Java代码中找到并获取有效标识符,如下所示: inta、b、c; 浮动d,e; a=b=5; c=6; 如果(a>b) { c=a-b; e=d-2.0; } 其他的 { d=e+6.0; b=a+c; } 我曾尝试在一个正则表达式中添加多个正则表达式,但如何构建一个模式来排除保留字 我尝试了这个正则表达式(&&&&&&&&&&&&&&&&&&&)&(&&&&&&)&([-+={1,2})&([.!?)}{;(-))((-)(否则| if | float |
inta、b、c;
浮动d,e;
a=b=5;
c=6;
如果(a>b)
{
c=a-b;
e=d-2.0;
}
其他的
{
d=e+6.0;
b=a+c;
}
我曾尝试在一个正则表达式中添加多个正则表达式,但如何构建一个模式来排除保留字
我尝试了这个正则表达式(&&&&&&&&&&&&&&&&&&&)&(&&&&&&)&([-+={1,2})&([.!?)}{;(-))((-)(否则| if | float | int)(\d[\d]),但它没有按预期工作
在下图中,我应该如何匹配标识符
Java有效标识符是:
\uu
是一个关键字(\b([A-Za-z\u$][$\ w]*)\b)
,但它不会过滤掉保留字
要排除保留字,需要负前瞻(?!)
来指定一组不匹配的标记:
\b(?)([A-Za-z$][$\w]*)
:
- 第1组:
排除指定单词的列表(?!(b | if | else | for | float | int))
- 第2组:
匹配标识符([A-Za-z$][$\w]*)
\b
使用美元符号$
,因此此正则表达式无法匹配以$
开头的标识此外,我们可能希望排除字符串和字符文本内部的匹配(“not_a_variable”、'c'、'\u65')
这可以使用正向查找
(?我认为Java允许Unicode字符作为标识符的一部分,即'Jävä'将是一个有效的标识符?@knittl是的,但是这个问题最初是关于尝试检测通常的基于ASCII的标识符。另外,因为代码将变成维护的噩梦。
ID pattern:
(?<=[^$\w'"\\])(?!(abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|double|do|else|enum|extends|false|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|null|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|transient|true|try|void|volatile|while|_\b))([A-Za-z_$][$\w]*)
Identifiers in the following code:
=====
public class Main {
static int $1;
protected char _c0 = '\u65';
private long c1__$$;
}
=====
Main
$1
_c0
c1__$$