加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP,preg_replace中的嵌套模板

发布时间:2020-12-13 17:21:39 所属栏目:PHP教程 来源:网络整理
导读:preg_replace("/[b](.*)[/b]/Usi","strong$1/strong","Some text here... [b][b]Hello,[b]PHP![/b][/b][/b] ... [b]and here[/b]"); 回报 Some text here... strong[b]Hello,[b]PHP!/strong[/b][/b] ... strongand here/strong 但我需要替换所有[b] …
preg_replace("/[b](.*)[/b]/Usi","<strong>$1</strong>","Some text here... [b][b]Hello,[b]PHP![/b][/b][/b] ... [b]and here[/b]");

回报

Some text here... <strong>[b]Hello,[b]PHP!</strong>[/b][/b] ... <strong>and here</strong>

但我需要替换所有[b] … [/ b]标签.为什么在我的情况下不会发生这种情况?

解决方法

它不起作用的原因:你抓住第一个[b],然后转到下一个[/ b],并保持两者之间不变.即,您更改外部[b]标签,但不更改嵌套在内部的标签.

您对@meza的评论建议您要成对替换伪标签,否则保持不变.执行此操作的最佳方法是使用多个传递,如下所示

$markup = "Some text here... [b][b]Hello,[b]PHP![/b][/b][/b] ... [b]and here[/b]";
$count = 0;
do {
    $markup = preg_replace("/[b](.*?)[/b]/usi",$markup,-1,$count );
} while ( $count > 0 );

print $markup;

我甚至不确定你是否可以在单行正则表达式中进行,但即使你可以,它也会相当复杂,因此难以维护.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读