我有字符串:
<img style="max-width:100%" src="http://media.doisongphapluat.com/thumb_x670x/2015/12/26/thumon.png" alt="">
尝试获取此图片的src:
<?php
preg_match('/<img.+src=[\'"](?P<src>.+)[\'"].*>/i', $step6[0], $image);
echo $image['src']; ?>
结果:
http://media.doisongphapluat.com/thumb_x670x/2015/12/26/thumon.png" alt="
为什么“alt =”会出现在此处以及如何将其删除?
答案 0 :(得分:1)
问题是.+
组中的src
重复是贪婪的。因此,它会尝试匹配尽可能多的字符,从而超出 src 属性的范围。
要解决此问题,您可以通过在末尾添加问号来简单地使重复变得懒惰。.+?
。
<img.+src=[\'"](?P<src>.+?)[\'"].*>
答案 1 :(得分:0)
您可以在explode();
上使用src=
,然后在不需要时删除剩余的=
和每个"
:
<?php
$string = '<img style="max-width:100%" src="http://media.doisongphapluat.com/thumb_x670x/2015/12/26/thumon.png" alt="">';
$string = explode("src=", $string);
$string = explode(" ", $string[1]);
$string = substr($string[0], 1, -1); // remove 1st and last "
echo $string;
?>
您需要确保您的HTML没有单引号,如果它符合\'
从@SeanBright的答案中删除第一个和最后一个字符的最后一行:Delete first character and last character from String PHP
$string = explode('src=', $string);
已经过测试。然后,您只需要在" "
后删除$string = substr($string[0], 1, -1); // remove 1st and last "
。
你也可以用
删除两个双重引号$string = str_replace('"','',$string);
我认为你的正则表达式失败了,因为它只是在src =“之后得到了所有内容,但没有停留在空间。其他人在别处评论说正则表达式不是分割HTML的最可靠方法。
如果您不想explode();
,可以使用strpos()
和substr();
分割字符串
$string = '<img style="max-width:100%" src="http://media.doisongphapluat.com/thumb_x670x/2015/12/26/thumon.png" alt="">';
$pos = strpos($string,'http');
$string = substr($string,$pos, -9); // remove last " and alt-...
echo $string;
这只有在图像标记的结尾与您的结尾时才有效,但如果标记关闭/>
,则会失败,因此您需要使用更多代码才能完全编程:
$string = '<img style="max-width:100%" src="http://media.doisongphapluat.com/thumb_x670x/2015/12/26/thumon.png" alt="">';
$pos = strpos($string,'http'); // find position of !http!
$string = substr($string,$pos); /// get string after !http"
$len = strlen($string); // get the length of resulting string
$pos1 = strpos($string,'"'); // find last "
$difpos = $len - $pos1; // get the difference to use for the minus
$string = substr($string,0,-$difpos); // get the string from 0 to "minus" position at end.
echo $string;
答案 2 :(得分:0)
尝试:
<?php
$input = "<img style='max-width:100%' src='http://media.doisongphapluat.com/thumb_x670x/2015/12/26/thumon.png' alt='' />";
$pattern = "/(http.+)'\salt/";
preg_match($pattern, $input, $matches);
echo $matches[1];
?>
它会给出:
http://media.doisongphapluat.com/thumb_x670x/2015/12/26/thumon.png
$matches[1]
给出括号内的内容,\s
用于alt
之前的空格。