如何从正则表达式中提取一个特定单词后的第一个单词

时间:2015-11-05 19:53:23

标签: java regex

这是我试过的代码

public static final String EXAMPLE_TEST = "ddd with fff Node  preceded"
            + " by Class Application  bzxcd by " 
            + "Class aaa ds  preceded by Class bbbb xxxx Ass";

          public static void main(String[] args) {
           boolean clarrification =  EXAMPLE_TEST.matches(".*\\bClass\\b.*");


           String pattern = "(.*?\\bClass\\b.*?)(\\s+)(\\w+)";

           System.out.println(EXAMPLE_TEST.replaceFirst(pattern, "$3$2")); 

我在这里尝试的是仅在'Class'字后提取第一个匹配项。在我的情况下,它提取应用程序,但后面跟着其余的单词。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用此简化的正则表达式:

String pattern = ".*?\\bClass\\s+(\\w+)\\b.*";

System.out.println(EXAMPLE_TEST.replaceFirst(pattern, "$1"));
//=> Application

此正则表达式匹配Class(非贪婪)之前的0个或多个字符,使用.*?后跟字边界和文字Class。接下来是一个或多个空格,然后使用(\\w+)在#1组中捕获下一个单词。必须后跟.*才能匹配其余字符串。在替换中,我们只使用反向引用$1来在最终输出中获得匹配的单词。