【发布时间】:2012-08-06 22:23:22
【问题描述】:
我有一些短信给前任:This is <b>an</b> example <b>text</b>.
如何删除粗体标签内的所有文本,所以它应该输出:
This is example.
【问题讨论】:
-
更恰当的语义标记使用 而不是 ....
我有一些短信给前任:This is <b>an</b> example <b>text</b>.
如何删除粗体标签内的所有文本,所以它应该输出:
This is example.
【问题讨论】:
使用preg_replace()
如果您想删除一个简单的标签以及其中的文本:
<?php
$string = 'This is <b>an</b> example <b>text</b>';
echo preg_replace('/(<b>.+?)+(<\/b>)/i', '', $string);
输出:
这是一个例子
还有正则表达式(类、id)、间距错误和反斜杠:
<?php
$string = 'This is <b class="c1" id=\'c2\'>an</b> example <b>text</B >';
echo preg_replace('@<(\w+)\b.*?>.*?</\1.*?>@si', '', $string);
输出:
这是一个例子
【讨论】:
<b> 到最后一个 </b> 的 everything,所以除了答案使用正则表达式之外,即使是正则表达式也是错误的。为此使用正则表达式并不是“有罪的”,这只是非常糟糕的做法。这类似于 C 的未定义行为。通过选择这种“简单”但完全错误的方式,OP 最终会发现一切都适合他,一切都在测试中,没有任何明显错误,但随后应用程序在他最重要的客户面前爆炸了。
简单的解决方案:
echo str_replace(array('<b>', '</b>'), '', 'This is <b>an</b> example <b>text</b>');
可能有更好的技术。在这里,我只是用一个空字符替换数组中每个出现的序列。有关详细信息,请参阅php.net。他们有一个类似的例子:
// Provides: Hll Wrld f PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
编辑。我错过了正则表达式标记,但正则表达式为此目的有点过头了?
【讨论】:
Hi <b>Hello</b> 输出应为:Hi