2012-11-12 66 views
0

笑脸我在一个论坛帖子这个PHP代码搜索图片图片:正则表达式查找不在PHP

if(preg_match("~<img.*src=\"(.*)\".*/>~isU", $htmltext, $imatch)) 
{ 
    $imageurl = $imatch[1]; 
} 

这会找到将htmlText第一张图像。 但是,我想跳过任何图像是smilie图标。所有的笑脸图标都放在文件夹/ forum/smilies /中。 如何从正则表达式中排除此文件夹?

+0

使用preg_match_all代替preg_match来查找所有图像。 –

+2

不要使用正则表达式来解析HTML,请使用DOM解析器。 – Barmar

回答

3

当您尝试解析HTML时,不推荐使用正则表达式。你可以看看this answer对这个相同的问题。

这将达到目的:

$dom = new DOMDocument(); 
$dom->loadHTML($htmltext); 
$images = $dom->getElementsByTagName('img'); 
$valid = array(); 
foreach ($images as $image) { 
    $src = $image->getAttribute('src'); 
    if ($src !== '' && strpos($src, '/forum/smilies/') !== 0) { 
     $valid[] = $src; 
    } 
} 
print_r($valid); 

$valid是含有所有非similey imgsrc给定$htmltext内的阵列。

+0

是的,使用DOM解析,但在你的代码中使用'stripos'可能会更好。甚至[php手册](http://us3.php.net/manual/en/function.preg-match.php)都会说:*“如果您只想检查是否包含一个字符串,请不要使用preg_match()在另一个字符串中,使用strpos()或strstr()来代替,因为它们会更快。“* – cegfault

+0

@cegfault好点!编辑... – Carlos