【问题标题】:PHP - Remove text that is boldPHP - 删除粗体文本
【发布时间】:2012-08-06 22:23:22
【问题描述】:

我有一些短信给前任:This is <b>an</b> example <b>text</b>.

如何删除粗体标签内的所有文本,所以它应该输出:

This is example.

【问题讨论】:

  • 更恰当的语义标记使用 而不是 ....

标签: php regex text


【解决方案1】:

使用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); 

输出:
这是一个例子

【讨论】:

  • 这只会删除粗体标签,我希望它也删除粗体标签内的文本。
  • 嗯,有趣的事情。我在你之前发布了一个正则表达式,有人投了反对票,因为将正则表达式与 html 一起使用显然是“有罪的”,但你被接受了:P。对你有好处。
  • @Soule,您的正则表达式无法正常工作,它会删除第一个和最后一个标签中的所有短语!它不是要求...
  • 好的,它在 ruby​​ 中工作,我当时没有设置 PHP。如果你的作品,那很好:)我删除了答案。
  • @Soule,这与您在 ruby​​ 中使用它的事实无关。您的正则表达式删除了从第一个 &lt;b&gt; 到最后一个 &lt;/b&gt;everything,所以除了答案使用正则表达式之外,即使是正则表达式也是错误的。为此使用正则表达式并不是“有罪的”,这只是非常糟糕的做法。这类似于 C 的未定义行为。通过选择这种“简单”但完全错误的方式,OP 最终会发现一切都适合他,一切都在测试中,没有任何明显错误,但随后应用程序在他最重要的客户面前爆炸了。
【解决方案2】:

简单的解决方案:

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");

编辑。我错过了正则表达式标记,但正则表达式为此目的有点过头了?

【讨论】:

  • 是的,正则表达式太过分了。虽然没有考虑 str_replace ;)
  • 不用担心。如果我读了标签,我可能会像你一样走。 :)
  • 感谢您的帮助,但这不是我想要的。您在上面的代码中看到它只删除了粗体标签,但是,我希望它完全删除粗体标签内的文本。例如:Hi &lt;b&gt;Hello&lt;/b&gt; 输出应为:Hi
  • 哦,我一定是瞎了。 @Soule:是时候发光了?
猜你喜欢
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 2011-03-09
  • 2013-12-06
  • 2013-01-31
  • 1970-01-01
相关资源
最近更新 更多