· 需要:
将<div> <name>小明</name> <name>小红</name> <name>张三</name></div>解决成:<div> <p>小明</p> <p>小红</p> <p>张三</p></div>
此需要在爬取网页,处理结果时,常常会遇到。
· php的解决办法:
<?php$str = " <div> <name>小明</name> <name>小红</name> <name>张三</name> </div>";function matchname($m){ //解决每一个匹配到的后果 return "<p>".$m[1]."</p>";}$res = preg_replace_callback("|<name>(.*?)<\/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 = "<div>"+ "\t<name>小明</name>\n" + "\t<name>小红</name>\n" + "\t<name>张三</name>\n" + "\t</div>"; String res = Test.preg_replace_callback( Pattern.compile("<name>(.*?)</name>") ,(MatchResult s)-> "<p>"+s.group(1)+"</p>" , str ); System.out.println(res); } //java版preg_replace_callback办法实现 public static String preg_replace_callback( Pattern pattern, Function<MatchResult, String> 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<MatchResult, String> callbackFuncFunction<MatchResult, String> 这个类型代表一个输出为MatchResult,输入为String的函数//2.(MatchResult s)-> "<p>"+s.group(1)+"</p>"这是一个匿名函数的写法,也能够写为(MatchResult s)->{ return "<p>"+s.group(1)+"</p>"}//3.callbackFunc.apply(matchRes.toMatchResult())apply为应用/利用这个匿名函数,入参为MatchResult类型
以上就是所有内容,心愿能帮忙到大家!