php中替换特定块的实现


今天在csdn上面有人提出了替换特定块的需求,看了一下,觉得挺有意思,于是一路跟进,最后有一些答案,给记录下来。

提问如下:

<a href="">中华人民共和国中华人民共和国\n</a>\n\n
或者
<a href="">\n中华人中华人民共和国\n</a>


这样的字符串中a标签的\n我怎么用正则替换掉啊????

实现方式1
$line = '<a href="">\n中华人民共和国中华人民共和国\n</a>\n\n保留!<a href="">baidu\n你好</a>保留\n保留<a href="">谷歌\n走了</a>保留\n保留';


# preg_match_all ("#<a[^>]*>([^<]+)</a>#", $line, $matches);

# var_dump($matches);


echo preg_replace_callback(
"#<a[^>]*>([^<]+)</a>#",
create_function(
// single quotes are essential here,
// or alternative escape all $ as \$

'$matches',
'return str_replace(\'\\n\', "", $matches[0]);'
),
$line
);

实现方式2
$rawText = preg_replace("/(<a.*?>.*?<\/a>)/sie", "str_replace('\\n',\"\",stripslashes(\"\$1\"))", $rawText);

实现方式3
$str = '<a href="">\n中华人民共和国中华人民共和国\n</a>\n\n保留!<a href="">baidu\n你好</a>保留\n保留<a href="">谷歌\n走了</a>保留\n保留';
$patten = '#<a.+?href="(.*?)".*?>(.+?)</a>#';

$result=array();
$tmp=array();
preg_match_all($patten,$str,$arr);

for($i=0;$i<count($arr[2]);$i++){
$tmp[$i] = str_replace('\n','',$arr[2][$i]);//清除换行
$result[$i] = str_replace($arr[2][$i],$tmp[$i],$str);
$str = $result[$i];//替换的内容重新赋值
}

echo str_replace('\n',"\n",$result[count($arr[2])-1]);




优质内容筛选与推荐>>
1、linux系统中启动daytime服务
2、eclipse-mysql-tomcat搭建jspk开发环境
3、VS2010+ICE3.5运行官方demo报错----std::bad_alloc
4、Algorithm Gossip (13) 背包问题 ( Knapsack Problem)
5、托拽购物车


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn