如何使用PHP

时间:2015-12-01 00:37:13

标签: php html mysql regex

我以这种方式从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周时间内......”

我知道如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

如果以该格式保存字符串,则可以使用regex和preg_match。

RegEx101.com Test Case

/(img).*?alt="(.*?)".*?src="(.*?)"/

enter image description here

<?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为你做了多少事!)