Java String.replaceAll() 引用最新找到的组
Java String.replaceAll() refer the latest found group
Javadoc说$1、$2等可以用来引用匹配组,但是在使用String.replaceAll()
时如何在替换字符串中引用最新找到的组呢?
即有一个字符串 "aaabbbaa"
和一个正则表达式 "a+"
,我希望能够执行类似 s.replaceAll("a+", "$\n")
的操作来获得 "aaa\nbbbaa\n"
,但是 Java 给了我 Illegal group reference
。
s.replaceAll("(a+)", "\n")
应该有效:
jshell> String s = "aaabbbaa"
s ==> "aaabbbaa"
jshell> s.replaceAll("(a+)", "\n")
==> "aaa\nbbbaa\n"
正如评论中已经指出的那样,您必须在正则表达式中标记捕获组。这就是括号 (...)
的作用。然后,您必须使用 </code> 引用该捕获组,这是第一个捕获组。 <code>[=14=]
将是整个匹配项(也在评论中指出),但仅 $
将不起作用。
Javadoc说$1、$2等可以用来引用匹配组,但是在使用String.replaceAll()
时如何在替换字符串中引用最新找到的组呢?
即有一个字符串 "aaabbbaa"
和一个正则表达式 "a+"
,我希望能够执行类似 s.replaceAll("a+", "$\n")
的操作来获得 "aaa\nbbbaa\n"
,但是 Java 给了我 Illegal group reference
。
s.replaceAll("(a+)", "\n")
应该有效:
jshell> String s = "aaabbbaa"
s ==> "aaabbbaa"
jshell> s.replaceAll("(a+)", "\n")
==> "aaa\nbbbaa\n"
正如评论中已经指出的那样,您必须在正则表达式中标记捕获组。这就是括号 (...)
的作用。然后,您必须使用 </code> 引用该捕获组,这是第一个捕获组。 <code>[=14=]
将是整个匹配项(也在评论中指出),但仅 $
将不起作用。