所以我有一个从数据库中提取的文本:
<b>Object title</b>
<br />
<p>Object description</p>
我需要删除<b>Object title</b>
,我尝试使用substr
,但没有想出正确的组合方法。你能告诉我怎么做吗?
编辑
请注意:我只需要删除第一个<b></b>
元素,该字符串的其他粗体部分都应该保持原样。
u应该使用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上运行一个循环。
这也可以在不使用正则表达式的情况下获得。我们在这里使用简单的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
?>
如果您确信文本中有您的模式:
//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>'));
}
您可以使用$limit
来最大限度地替换preg_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>