java实现正则匹配出多结果,处理后批量置回的功能(即php的preg_replace_callback功能)

· 需求:

小明 小红 张三处理成:小明
小红
张三

此需求在爬取网页,处理结果时,经常会遇到。
· php的处理方法:
小明 小红 张三"; function matchname($m){ //处理每一个匹配到的结果 return "【java实现正则匹配出多结果,处理后批量置回的功能(即php的preg_replace_callback功能)】".$m[1]."
"; }$res = preg_replace_callback("|(.*?)<\/name>|","matchname", $str); var_dump($res);

php的处理方法无需解释,一个preg_replace_callback函数就搞定了。
· java的处理方法
import java.util.function.Function; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test {public static void main(String[] args) { String str = ""+ "\t小明\n" + "\t小红\n" + "\t张三\n" + "\t"; String res = Test.preg_replace_callback( Pattern.compile("(.*?)") ,(MatchResult s)-> ""+s.group(1)+"
" , str ); System.out.println(res); }//java版preg_replace_callback方法实现 public static String preg_replace_callback( Pattern pattern, Function callbackFunc, CharSequence subject ) { Matcher matchRes = pattern.matcher(subject); StringBuffer resString = new StringBuffer(); while (matchRes.find()) { matchRes.appendReplacement( resString, callbackFunc.apply(matchRes.toMatchResult()) ); } matchRes.appendTail(resString); return resString.toString(); } }

解释:
//1.Function callbackFunc Function 这个类型代表一个输入为MatchResult,输出为String的函数//2.(MatchResult s)-> ""+s.group(1)+"
" 这是一个匿名函数的写法,也可以写为 (MatchResult s)->{ return ""+s.group(1)+"
" }//3.callbackFunc.apply(matchRes.toMatchResult()) apply为使用/应用这个匿名函数,入参为MatchResult类型

    推荐阅读