· 需要:

将<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类型

以上就是所有内容,心愿能帮忙到大家!