Allen 2022-10-08 16:04:20 5767 0 0 0 0

網站名稱:一个正则表达式问题:如何实现替换标签内的内容(按标签实现多块内容替换)

網站地址:

如何实现替换标签内的内容(按标签实现多块内容替换),想实现帖子部分隐藏内容的功能。暂定使用标志:[hhh],但如果内容中有两块隐藏内容,就无法两块分…

[SEO信息] [Alexa信息]

-->>直達網站

想实现帖子部分隐藏内容的功能。

暂定使用标志:...

用下面的正则可以实现:

|[hhh[sS]*/hhh]|

但如果内容中有两块隐藏内容,就无法两块分别替换了,会从第一块的开始标志到第二块的结束标志中的内容都当一块内容替换。。。

如下面的例子:

原内容

这是正常内容1,这是正常内容1,
这是正常内容1,这是正常内容1。
第一块隐藏内容,
第一块隐藏内容
第一块隐藏内容

这是正常内容2,这是正常内容2,
这是正常内容2,这是正常内容2。
第二块隐藏内容,
第二块隐藏内容
第二块隐藏内容

这是正常内容3,这是正常内容3,
这是正常内容3,这是正常内容3。

现在的结果:

这是正常内容1,这是正常内容1,
这是正常内容1,这是正常内容1。
“内容已经隐藏”
这是正常内容3,这是正常内容3,
这是正常内容3,这是正常内容3。

希望实现的结果:

这是正常内容1,这是正常内容1,
这是正常内容1,这是正常内容1。
“此内容已经隐藏”
这是正常内容2,这是正常内容2,
这是正常内容2,这是正常内容2。
“此内容已经隐藏”
这是正常内容3,这是正常内容3,
这是正常内容3,这是正常内容3。

如果实现这种两块甚至多块内容分别替换,不影响其他内容呢!

...

在网上请教大神,给了下面的代码:

            $content = preg_replace_callback("/(.*?)/", 
                function ($matches) {
                    return str_replace($matches[1],$hidden_str,$matches[0]);
                }, $content);

第一次看到这种用法,参数还可以声明函数。

试了一下,还是不行。

不过参考大神的代码,改进了一下,居然实现了。多试了几次,找到问题所在,如下:

$pattern="|[hhh[sS]*/hhh]|";  // was 不能实现多块替换
$pattern="|[hhh[sS](.*?)|";  //可以实现多块替换
//$pattern="|[hhh[sS](.*?)/hhh]|";   //可以实现多块替换,可以不加[/
//$pattern="|[hhh[sS]*|";    //不能实现多块替换,加了[/也不行
$content= preg_replace($pattern, $hidden_str, $content);

问题应该出在”[sS]*“的*上,把*换成(.*?)就可以了!

【版權聲明】
本文爲原創,遵循CC 4.0 BY-SA版權協議!轉載時請附上原文鏈接及本聲明。
原文鏈接:https://tdlib.com/am.php?t=dGSQOEolJlm2
Tag: 正则表达式
我也要發一個   ·   返回首頁     ·   返回[编程]   ·    前一個  ·   下一個
歡迎評論
未登錄,
請先 [ 註冊 ] or [ 登錄 ]
(一分鍾即可完成註冊!)
返回首頁     ·   返回[编程]   ·   返回頂部