有没有办法只获得与preg_match_all的唯一匹配?

时间:2011-04-03 22:57:30

标签: php regex

您好我希望得到以下所有独特的匹配项。我该怎么办?

preg_match_all('#http://[\S]+(?:jpe?g|png|gif)#is', $content, $filtered);

$filtered = array_unique($filtered[0]);
foreach($filtered as $value){
${'varpics' . $i} .= '<img width="200px" height="200px" src="'.$value.'"><br>'; }

我仍然得到双重比赛。

1 个答案:

答案 0 :(得分:3)

没有。只需将结果传递给array_unique

除非您希望真正了解preg_replace_callback并将匹配推送到集合中。


<?php
$content = <<<HTML
<img src="http://www.mysite.com/image1.jpg" />
<img src="http://www.mysite.com/image2.gif" />
<img src="http://www.mysite.com/image1.jpg" />
HTML;

preg_match_all('#http://[\S]+(?:jpe?g|png|gif)#is', $content, $matches);
$images = array_unique($matches[0]);

var_dump($images);

完美适合我。输出:

array
  0 => string 'http://www.mysite.com/image1.jpg' (length=32)
  1 => string 'http://www.mysite.com/image2.gif' (length=32)

但是你的代码还有很多其他问题。例如,$i定义在哪里?你为什么要尝试定义这样的变量?使用数组,而不是附加数字的名称......我甚至不确定这是否是有效的语法。