这个正则表达式是什么意思?

3

我发现了这个Java正则表达式,但不知道它匹配什么?

Pattern.compile("\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*(\\.\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*)*");

javaJavaIdentifierStart 匹配什么内容?


5
请阅读相关文档:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix - Matt Ball
3
@Matt Ball 我搜索了一下,虽然我没有问关于javaJavaIdentifierStart的所有内容,但是什么都没有找到。有一个开源文件来自JDK 1.7,但从代码中我什么也不理解。 - Xelian
1
你可以在这里阅读关于这些字符类的内容:http://www.tutorialspoint.com/java/lang/java_lang_character.htm - mas.morozov
3个回答

4
`\\p{javaJavaIdentifierStart}` 表示任何一个符合 Java 标识符命名规范的首字符。
`\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*\\.\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*` 表示 `anyIdentifier.anyIdentifier`,即由点号分隔的两个 Java 标识符(如命名空间名称和类名、类名和静态成员名称、对象名称和成员名称等)。
完整(已更正)的正则表达式表示可能带有限定符的 Java 标识符,可以是简单的“名称”或由点号分隔的一系列“名称”,但不一定是完全限定名称。

3
我相信这相当于从Java的Character类调用此方法:
isJavaIdentifierStart

public static boolean isJavaIdentifierStart(char ch)
Determines if the specified character is permissible as the first character in a Java identifier.
A character may start a Java identifier if and only if one of the following conditions is true:

isLetter(ch) returns true
getType(ch) returns LETTER_NUMBER
ch is a currency symbol (such as "$")
ch is a connecting punctuation character (such as "_").
Note: This method cannot handle supplementary characters. To support all Unicode characters,     including supplementary characters, use the isJavaIdentifierStart(int) method.

Parameters:
ch - the character to be tested.
Returns:
true if the character may start a Java identifier; false otherwise.

Source (which is a bit more readable)


1
这应该可以匹配一个完全限定的类名。

所以如果ch = 任何正确的Java标识符,那么模式将如下所示: ch ch*(.ch ch*)* 例如: com.example.parcers.xml - Xelian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接