这是我尝试的代码
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"));
我在这里尝试的是仅提取“类”字之后的第一次出现。就我而言,它提取了Application,但后面紧跟着其余的单词。
如何解决这个问题?
您可以使用以下简化的正则表达式:
String pattern = ".*?\\bClass\\s+(\\w+)\\b.*";
System.out.println(EXAMPLE_TEST.replaceFirst(pattern, "$1"));
//=> Application
此正则表达式匹配Class
(非贪婪)之前的0个或多个字符,.*?
并使用单词边界和文本Class
。它后面跟随1个或多个空格,然后使用捕获第一个组中的下一个单词(\\w+)
。后面必须.*
匹配字符串的其余部分。在替换中,我们仅使用反向引用$1
将匹配的单词返回到最终输出中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句