我以这种方式从DB中提取了一个字符串:
<p><img style="margin: 5px; float: left;" alt="rotary-wheelchairs" src="images/stories/DSC_0693_400x400.jpg" />In a 2 week period, the Rotary Club of Playa, in partnership with the... 145 wheelchairs to disabled children and adults. </p>
我想从该字符串中提取这三个值:
1- img:所有img标签或至少src的值
2- alt值
3-纯文本,例如“在2周时间内......”
我知道如何实现这一目标?
答案 0 :(得分:3)
如果以该格式保存字符串,则可以使用regex和preg_match。
/(img).*?alt="(.*?)".*?src="(.*?)"/
<?php
$reg = '/(img).*?alt="(.*?)".*?src="(.*?)"/';
$str = '<p><img style="margin: 5px; float: left;" alt="rotary-wheelchairs" src="images/stories/DSC_0693_400x400.jpg" />In a 2 week period, the Rotary Club of Playa, in partnership with the... 145 wheelchairs to disabled children and adults. </p>';
$matches = [];
preg_match($reg, $str, $matches);
$img = $matches[1];
$alt = $matches[2];
$src = $matches[3];
print $img . ' ' . $alt . ' ' . $src;
?>
答案 1 :(得分:1)
您可以尝试使用一些html解析器。我用过domDocument:
$html = "Your html string"
$dom = new domDocument;
$dom->loadHTML($html);
$img = $dom->getElementsByTagName('img')
//getting the src of image
echo $img->attributes->getNamedItem('src')->value . PHP_EOL;
//getting the alt value
echo $img->attributes->getNamedItem('alt')->value . PHP_EOL;
//plain text
echo $dom->textContent
答案 2 :(得分:1)
使用PHP和regexp,我会分多步完成。
首先获取img和纯文本:
preg_match('/(<img.*?>)(.*)</i', $line, $m);
list($x, $img, $plain_text) = $m;
// Bug: This assumes the plain text does not include any tags (eg, <B>).
这可以避免担心属性的顺序以及可能让它超过>
的其他事物。
然后单独获取每个属性(因为它们是无序的和可选的):
preg_match('/ src=(".*?"|\'.*?\'|.*?)[ >]/i', $img, $m);
$src = $m[1];
// Bug: If the whitespace is a new-line, this won't work correctly.
// Bug: It fails to remove the outer quotes, if any.
并且彼此所需的属性同上。
(看看domDocument为你做了多少事!)