在文本中匹配完全限定的 Java 类名的最佳方法是什么?
示例:java.lang.Reflect
、java.util.ArrayList
、org.hibernate.Hibernate
。
最佳答案
Java 完全限定的类名(比如说“N”)具有结构
N.N.N.N
“N”部分必须是 Java 标识符。 Java 标识符不能以数字开头,但在初始字符之后可以使用字母和数字、下划线或美元符号的任意组合:
([a-zA-Z_$][a-zA-Z\d_$]*\.)*[a-zA-Z_$][a-zA-Z\d_$]*
------------------------ -----------------------
N N
它们也不能是保留字(如 import
、true
或 null
)。如果您只想检查合理性,以上就足够了。如果您还想检查有效性,还必须检查保留字列表。
Java 标识符可以包含任何 Unicode 字母,而不是“仅限拉丁语”。如果您也想检查这一点,请使用 Unicode 字符类:
([\p{Letter}_$][\p{Letter}\p{Number}_$]*\.)*[\p{Letter}_$][\p{Letter}\p{Number}_$]*
或者,简称
([\p{L}_$][\p{L}\p{N}_$]*\.)*[\p{L}_$][\p{L}\p{N}_$]*
Java Language Specification, (section 3.8)包含有关有效标识符名称的所有详细信息。
另请参阅此问题的答案:Java Unicode variable names
关于java - 匹配全限定类名的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205339/