这是我试过的代码
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'字后提取第一个匹配项。在我的情况下,它提取应用程序,但后面跟着其余的单词。
如何解决这个问题?
答案 0 :(得分:1)
您可以使用此简化的正则表达式:
String pattern = ".*?\\bClass\\s+(\\w+)\\b.*";
System.out.println(EXAMPLE_TEST.replaceFirst(pattern, "$1"));
//=> Application
此正则表达式匹配Class
(非贪婪)之前的0个或多个字符,使用.*?
后跟字边界和文字Class
。接下来是一个或多个空格,然后使用(\\w+)
在#1组中捕获下一个单词。必须后跟.*
才能匹配其余字符串。在替换中,我们只使用反向引用$1
来在最终输出中获得匹配的单词。