· 需求:
将小明
小红
张三 处理成:小明
小红
张三
此需求在爬取网页,处理结果时,经常会遇到。
· 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类型