如何使用php删除<b> </b>中包含的部分字符串?

时间:2015-10-29 07:01:03

标签: php string

所以我从db中删除了一个文本:

<b>Object title</b>
<br />
<p>Object description</p>

我需要删除<b>Object title</b>,我尝试使用substr,但没有提出将它组合在一起的正确方法。你能告诉我怎么做吗?

修改

请注意:我只需删除第一个<b></b>元素,该字符串的每个其他粗体部分都应保持原样。

4 个答案:

答案 0 :(得分:0)

这也可以在不使用正则表达式的情况下获得。 我们在这里使用简单的PHP字符串函数:

试试这个:

<?php

function removeTags($subject, $replaceStr){
    $strlength = strlen($replaceStr);
    $subject = strstr($subject, $replaceStr, true) . substr(strstr($subject, $replaceStr), 0 + $strlength);
    return $subject;
}

$str = '<b>Object title</b><b>Object title</b><br /><p>Object description</p><b>Object title</b>';
$brOpenRemoved = removeTags($str, '<b>');
$brCloseRemoved = removeTags($brOpenRemoved, '</b>');
echo $brCloseRemoved; // final output
?>

函数removeTags删除提供给它的字符串。我们在这里提供了标签。

它只删除第一次出现,因为我们使用strstr()这样的函数,它只对字符串的第一次出现起作用。

修改

我们可以使用以下功能来防止一次又一次地调用相同的功能

<?php

function removeFirstOccurence($subject, $replaceTag){
    $replaceStrings = ['<'.$replaceTag.'>', '</'.$replaceTag.'>'];
    foreach($replaceStrings as $replaceStr){
        $strlength = strlen($replaceStr);
        $subject = strstr($subject, $replaceStr, true) . substr(strstr($subject, $replaceStr), 0 + $strlength);
    }
    return $subject;
}

$str = '<b>Object title</b><b>Object title</b><br /><p>Object description</p><b>Object title</b>';
$brRemoved = removeFirstOccurence($str, 'b');
echo $brRemoved; // final output
?>

答案 1 :(得分:0)

你应该使用 preg_match 来解决这个问题。

$text = "<b>Object title</b><br /><p>Object description</p>";

if (!preg_match("/<b>.*<\/b>/",$text,$m)) {
   str_replace($m[0],"",$text);
}

这应该对你有用。 如果你想删除所有你可以在$ m上运行一个循环。

答案 2 :(得分:0)

如果您确定文本中有您的模式:

//remove first <b> tag
$text = '<b>foo</b>...';
$pos = strpos($text,'<b>');
if ($pos !== false) {
    $newtext = substr_replace($text,'',$pos,strlen('<b>'));
}

//remove first </b> tag
$pos = strpos($text,'</b>');
if ($pos !== false) {
    $newtext = substr_replace($newtext,'',$pos,strlen('</b>'));
}

答案 3 :(得分:0)

您可以使用$limitpreg_replace

中每种模式的最大可能替换次数
$yourString = 
"<b>Object title</b>
 <br />
 <p>Object description</p>";

$limit = 1;
$pattern = "/<b>(.*)<\/b>/";
$replace = "";

$newString = preg_replace($pattern, $replace, $yourString, $limit);
echo $newString;

输出:

<br />
<p>Object description</p>

如果您使用(.*),也可以删除<b></b>代码,并保留内容:

$limit = 1;
$pattern = "/<b>(.*)<\/b>/";
$replace = "$1";

$newString = preg_replace($pattern, $replace, $yourString, $limit);

echo $newString; 

输出:

Object title
<br />
<p>Object description</p>

或仅保留没有内容的标签:

$limit = 1;
$pattern = "/<b>(.*)<\/b>/";
$replace = "<b></b>";

$newString = preg_replace($pattern, $replace, $yourString, $limit);

echo $newString; 

输出:

<b></b>
<br />
<p>Object description</p>