检查字符串中的 img src 关键字

Check for img src keyword in a string

我有一个博客系统,用户在 post 内容中输入图像 url,例如

hey how are you <img src="example.com/image.png"> 

如果用户这样写

hello how are you <img src="example.com/image.png">

然后我想找到这条 img src 行并将其用作特色图片

这是我尝试过的:

$haystack = 'how are you <img src="hey.png">';

$needle = '<img src="';

if (strpos($haystack, $needle) !== false) {

    echo "$needle";

}
else { echo "no"; }

当我回应时,我只得到:

 <img src="

我想要完整

<img src="hey.png"> 

从那个字符串我该怎么做。

strpos returns 大海捞针的索引。查看将返回值与 substrhaystack 组合以获得所需的子字符串。

由于图像 src 是未知的,请使用正则表达式,类似这样的东西(超出我的头脑,所以它可能是不正确的语法):

$string = "hey how are you <img src=\"example.com/image.png\">"; 
$return = preg_match('/src="([^"]+)"/', '$string', $matches);

您可以使用正则表达式来匹配该字符串。好久没离开了php...所以大概是下面的样子:

<?php
  $pattern = '/<img\ssrc\=".*?">/';
  $haystack = 'how are you <img src="hey.png">';

  preg_match($pattern, $haystack, $matches);

  print_r($matches);
?>

结果将是

Array
(
    [0] => <img src="hey.png">
)

查看 preg_match() 了解更多详情。

使用 Regular Expression (RegEx)

很可能更容易

这是一个简单的例子:

$string = 'hey how are you <img src="example.com/image.png"> blah blah';
preg_match('/<img src=".*">/', $string, $matches);
print_r($matches);

这会给你一个像这样的数组:

Array
(
    [0] => <img src="example.com/image.png">
)

这应该适合你:

$string = 'hey how are you <img src="example.com/image.png"> test test <img src="example.com/image2.png">';
preg_match_all('/(<img .*?>)/', $string, $img_tag);
print_r($img_tag[1]);

输出:

Array
(
    [0] => <img src="example.com/image.png">
    [1] => <img src="example.com/image2.png">
)

尽管如此,您应该考虑为此使用解析器。它们已经内置了比正则表达式更多的功能,并且错误更清晰。

Regex101: https://regex101.com/r/iY1wX0/1

或者如果你真的只是想要第一个 img 就使用 preg_match.

<?php
$string = 'hey how are you <img src="example.com/image.png"> test test <img src="example.com/image2.png">';
preg_match('/(<img .*?>)/', $string, $img_tag);
echo $img_tag[1];

输出:

<img src="example.com/image.png">