如何通过指定开始和结束字符从字符串中提取子字符串?

how to sub-string from string by specifying the start and end characters?

我有一些总是以图像标签开头的文本,所以我想通过指定应该删除的字符串的开始和结束字符来打印没有图像的文本,并获取其余文本,类似:

explode($text, '<img', '/>'); // where explode($string, $start_chars, $end_chars);

例如:

$text = "<img src='anything' width='100' height='200'/><h1>Hello World!</h1>";

输出应该是<h1>Hello World!</h1>

那么我如何在 php 中做到这一点?

你可能没有听说过PHP的substr()函数。在这里注明!

http://php.net/substr

根据新问题修改...

使用 DOMDocument:

$text = "<img src='anything' width='100' height='200'/><h1>Hello World!</h1>";
$dom = new DOMDocument();
$dom->loadHTML($text);
$h1Tags = $dom->getElementsByTagName('h1');
$string = $dom->saveHTML($h1Tags->item(0));
echo $string;

输出:<h1>Hello World!</h1>

有关更多信息/示例,请参阅 here

给定一些文本,例如:

<img src='img1.png' width='100' height='200'/><h1>Title 1</h1>
<img src='img2.png' width='100' height='200'/><h1>Title 2</h1>
<img src='img4.png' width='100' height='200'/><h1>Title 3</h1>

您声明只想收集出现在 IMG 标签之间的文本。之前不清楚,有人建议,您可以使用 DOMDocument 来解析 HTML.

使用正则表达式是另一种方法。示例:https://regex101.com/r/kH0xA3/1

$re = "/<*img.*\/>(.*)/im"; 
$str = "<img src='img1.png' width='100' height='200'/><h1>Title 1</h1>\n<img src='img2.png' width='100' height='200'/><h1>Title 2</h1>\n<img src='img4.png' width='100' height='200'/><h1>Title 3</h1>"; 

preg_match_all($re, $str, $matches);

试试这个:

$text = "<img src='anything' width='100' height='200'/><h1>Hello World!</h1>";

$dom = new DOMDocument();
$dom->loadHTML($text);

$node = $dom->getElementsByTagName('img')->item(0);
$node->parentNode->removeChild($node);

$dom->removeChild($dom->doctype);           
$dom->replaceChild($dom->firstChild->firstChild->firstChild, $dom->firstChild);

echo $dom->saveHtml();

似乎是最佳答案:

$dom = new DOMDocument();
$dom->loadHTML($m->en);
$node = $dom->getElementsByTagName('img')->item(0);
$node->parentNode->removeChild($node);
$string = $dom->saveHTML();
echo $string;