Java正则表达式从字符串中获取单词

Java正则表达式从字符串中获取单词,java,regex,Java,Regex,如何在java中使用正则表达式实现以下功能 String code = "import java.io.*;" + "import java.util.*;" + "public class Test1 extends Exam{" + " // my code " + "}"; 从上面的字符串中,如何准确地获取类名Test1。使用以下正则表达式: String clas

如何在java中使用正则表达式实现以下功能

String code = "import java.io.*;"  +
              "import java.util.*;"  +
              "public class Test1 extends Exam{" +
                  " // my code " +
              "}";
从上面的字符串中,如何准确地获取类名Test1。

使用以下正则表达式:

String className = code.replaceAll("(?s)^.*?(?:public|protected|private)?\\s*(?:\\s+static\\s+)?class\\s+(\\S+).*$", "$1");
//=> Test1
使用此正则表达式:

String className = code.replaceAll("(?s)^.*?(?:public|protected|private)?\\s*(?:\\s+static\\s+)?class\\s+(\\S+).*$", "$1");
//=> Test1

是否总是有
扩展
?您可以使用捕获的组:
/.*class(\S+).*/
是可以扩展或实现。是否总是有
扩展
?您可以使用捕获的组:
/.*class(\S+)./
是可以扩展或实现。
(?:public | protected | private)?(?:\S+静态)?\s+class
@anubhava您的上一个是工作。这个更新的不起作用。是的,上一个也适用于你的例子,我已经测试过了。完美的专家。。。非常感谢@anubhava。。您能简单地解释一下它是如何工作的吗?
(?s)
用于使点匹配新行。然后它匹配任何一个
public | protected | private
关键字,后跟可选的
static
,然后后跟
class
。之后,它捕获
\\s+
(即非空格字符),在替换部分,它将整个字符串替换为该
捕获的组#1
(?:public | protected | private)?(?:\s+static)?\s+类
@anubhava您以前的组是工作组。这个更新的不起作用。是的,上一个也适用于你的例子,我已经测试过了。完美的专家。。。非常感谢@anubhava。。您能简单地解释一下它是如何工作的吗?
(?s)
用于使点匹配新行。然后它匹配任何一个
public | protected | private
关键字,后跟可选的
static
,然后后跟
class
。之后,它捕获
\\s+
(即非空格字符),在替换部分,它将整个字符串替换为该
捕获的组#1