1 回答
TA贡献1934条经验 获得超2个赞
将它们组合成一个大的正则表达式,如下所示:
package test;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws Exception {
String input = Files.readString(Paths.get("src/main/java/test/Test.java"));
String keyword = "\\b(?:else|if|int|return|void|while|for|package|import|public|protected|private|static|class|throws)\\b";
String identifier = "\\b[a-zA-Z][a-zA-Z0-9]*\\b";
String number = "-?\\b[\\d]+\\b";
String regex = "(" + keyword + ")|(" + identifier + ")|(" + number + ")";
Pattern pattern = Pattern.compile(regex);
for (Matcher m = pattern.matcher(input); m.find(); ) {
if (m.start(1) != -1)
System.out.println("Keyword: " + m.group());
else if (m.start(2) != -1)
System.out.println("Identifier: " + m.group());
else
System.out.println("Number: " + m.group());
}
}
}
该代码使用自己的源代码作为测试,因此输出为:
Keyword: package
Identifier: test
Keyword: import
Identifier: java
Identifier: nio
Identifier: file
Identifier: Files
Keyword: import
Identifier: java
Identifier: nio
Identifier: file
Identifier: Paths
Keyword: import
Identifier: java
Identifier: util
Identifier: regex
Identifier: Matcher
Keyword: import
Identifier: java
Identifier: util
Identifier: regex
Identifier: Pattern
Keyword: public
Keyword: class
Identifier: Test
Keyword: public
Keyword: static
Keyword: void
Identifier: main
Identifier: String
Identifier: args
Keyword: throws
Identifier: Exception
Identifier: String
Identifier: input
Identifier: Files
Identifier: readString
Identifier: Paths
Identifier: get
Identifier: src
Identifier: main
Identifier: java
Identifier: test
Identifier: Test
Identifier: java
Identifier: String
Identifier: keyword
Identifier: b
Keyword: else
Keyword: if
Keyword: int
Keyword: return
Keyword: void
Keyword: while
Keyword: for
Keyword: package
Keyword: import
Keyword: public
Keyword: protected
Keyword: private
Keyword: static
Keyword: class
Keyword: throws
Identifier: b
Identifier: String
Identifier: identifier
Identifier: b
Identifier: a
Identifier: zA
Identifier: Z
Identifier: a
Identifier: zA
Identifier: Z0
Number: -9
Identifier: b
Identifier: String
Identifier: number
Identifier: b
Identifier: d
Identifier: b
Identifier: String
Identifier: regex
Identifier: keyword
Identifier: identifier
Identifier: number
Identifier: Pattern
Identifier: pattern
Identifier: Pattern
Identifier: compile
Identifier: regex
Keyword: for
Identifier: Matcher
Identifier: m
Identifier: pattern
Identifier: matcher
Identifier: input
Identifier: m
Identifier: find
Keyword: if
Identifier: m
Identifier: start
Number: 1
Number: -1
Identifier: System
Identifier: out
Identifier: println
Identifier: Keyword
Identifier: m
Identifier: group
Keyword: else
Keyword: if
Identifier: m
Identifier: start
Number: 2
Number: -1
Identifier: System
Identifier: out
Identifier: println
Identifier: Identifier
Identifier: m
Identifier: group
Keyword: else
Identifier: System
Identifier: out
Identifier: println
Identifier: Number
Identifier: m
Identifier: group
添加回答
举报