语法regex用于提取图像的源

时间:2009-09-29 17:50:09

标签: php regex

啊,啊,那里!

我不能“猜测”我应该使用巫婆语法来提取图像的来源,而只是提取网址而不是src=这两个引号?

这是我的代码:

function get_all_images_src() {
    $content = get_the_content();
    preg_match_all('|src="(.*?)"|i', $content, $matches, PREG_SET_ORDER);
    foreach($matches as $path) {
        echo $path[0];
    }
}

当我使用它时,我打印出来了:

src="http://project.bechade.fr/wp-content/uploads/2009/09/mer-300x225.jpg"

我希望只得到这个:

http://project.bechade.fr/wp-content/uploads/2009/09/mer-300x225.jpg

有什么想法吗?

感谢您的帮助。

5 个答案:

答案 0 :(得分:5)

不完全是你问题的答案,但在解析html时,请考虑使用正确的html解析器:

foreach($html->find('img') as $element) {
  echo $element->src . '<br />';
}

请参阅:http://simplehtmldom.sourceforge.net/

答案 1 :(得分:3)

$path[1]代替$path[0]

答案 2 :(得分:0)

echo $path[1];

$ path [0]是匹配的完整字符串。 $ path [1]是第一个分组。

答案 3 :(得分:0)

您可以使用“作为分隔符来爆炸字符串,然后您获得的数组中的第二项将是正确的字符串:

$ array = explode('“',$ full_src);

$ bit_you_want = $ array [1];

重新处理原始功能,它将是:

function get_all_images_src() {    
$content = get_the_content();    
preg_match_all('|src="(.*?)"|i', $content, $matches, PREG_SET_ORDER);    
foreach($matches as $path) {   
$src = explode('"', $path);     
echo $src[1];    
}
}

答案 4 :(得分:0)

感谢Ithcy的正确答案。 我想我已经太久没回复了,因为他删除了它,我只是不知道他的答案在哪里消失了......

所以这是我收到的邮件:

  

'| src =“(。*?)”| i'没有任何意义   正则表达式。试试'| src =“([^”] +)“| i”。   (这仍然不是最强大的   解决方案,但比什么更好   你有。)

     

此外,其他人都说。您   想要$ path 1,而不是$ path [0]。你是   已经提取了所有的src   属性为$ matches []。有   与$ path [0]无关。如果你是   没有获得所有的src属性   在文中,有一个问题   代码中的其他地方。

     

还有一件事 - 你应该使用真实的   HTML解析器,因为img标签   不是src的唯一标签   属性。如果您正在使用此代码   在原始HTML源代码上,它将会发生   匹配不仅仅是   标签等。

     

- ithcy

我做了他告诉我要做的所有事情,包括使用Bart的HTML解析器(第二个回答)。

它就像一个魅力!谢谢你的伴侣...