1

我一直在尝试使用preg_match_all30 分钟,但看起来我做不到。

基本上我有一个$var包含一串 HTML 代码。例如:

<br>iihfuhuf
<img title="Image: http://www.jlnv2.local/temp/temp513caca536fcd.jpeg"   
 src="http://www.jlnv2.local/temp/temp513caca536fcd.jpeg">
<img src="http://www.jlnv2.local/temp/temp513caca73b8da.jpeg"><br>

我想获取包含在其值src中的标签的属性值。img/temp/temp[a-z0-9]{13}\.jpegsrc

这是我到目前为止所拥有的:

preg_match_all('!(<img.*src=".*/temp/temp[a-z0-9]{13}\.jpeg"(.*alt=".*")?>)!', $content, $matches);
4

6 回答 6

8
<img[^>]*src="([^"]*/temp/temp[a-z0-9]{13}\.jpeg)"

<img[^>]*选择 IMG 标签

src="([^"]*)"获取 src 值并将其保存为匹配项

/temp/temp[a-z0-9]{13}\.jpeg是 src 值的过滤器

对于快速 RegEx 测试,请使用一些在线工具,例如http://regexpal.com/

于 2013-03-10T16:17:23.293 回答
1

您需要做的就是将另一个组添加到您的正则表达式中。你已经用大括号包围了你想从匹配中提取的所有内容:

preg_match_all('!(<img.*src="(.*/temp/temp[a-z0-9]{13}\.jpeg)"(.*alt=".*")?>)!', $content, $matches);

你可以看到在这里工作。您可以在 中找到 URL $matches[2]

但只是说出来:正则表达式不是从 HTML 中提取任何内容的合理方法。最好使用 DOMDocument、XPath 或类似的东西。

于 2013-03-10T16:18:29.777 回答
1

这是一个基于DOMDocument/DOMXPath的示例,说明如何执行此操作。这可以说是唯一正确的方法,因为除非你真的很擅长正则表达式,否则很可能总会出现会破坏你逻辑的极端情况。

$doc = new DOMDocument;
$xpath = new DOMXPath($doc);

$doc->loadHTML($content);

$candidates = $xpath->query("//img[contains(@src, '/temp/temp')]");

$result = array();
foreach ($candidates as $image) {
  $src = $image->getAttribute('src');
  if (preg_match('/temp[0-9a-z]{13}\.jpeg$/', $src, $matches)) {
    $result[] = $src;
  }
}

print_r($result);
于 2013-03-10T16:32:58.740 回答
0

试试这个:

preg_match_all('/src="([^"]+temp[a-z0-9]{13}\.jpeg)"/',$url,$matches);

var_dump($matches);
于 2013-03-10T16:18:26.683 回答
0
<?php
$text = '<br>iihfuhuf<img title="Image: http://www.jlnv2.local/temp/temp513caca536fcd.jpeg" src="http://www.jlnv2.local/temp/temp513caca536fcd.jpeg"><img src="http://www.jlnv2.local/temp/temp513caca73b8da.jpeg"><br>';
$pattern = '#src="([^"]+/temp/temp[a-z0-9]{13}\.jpeg)"#';
preg_match_all($pattern, $text, $out);
echo '<pre>';
print_r($out);
?>

Array
(
    [0] => Array
        (
            [0] => src="http://www.jlnv2.local/temp/temp513caca536fcd.jpeg"
            [1] => src="http://www.jlnv2.local/temp/temp513caca73b8da.jpeg"
        )

    [1] => Array
        (
            [0] => http://www.jlnv2.local/temp/temp513caca536fcd.jpeg
            [1] => http://www.jlnv2.local/temp/temp513caca73b8da.jpeg
        )

)
于 2013-03-10T16:21:50.727 回答
0
$text = '<br>iihfuhuf<img title="Image: http://www.jlnv2.local/temp/temp513caca536fcd.jpeg" src="http://www.jlnv2.local/temp/temp513caca536fcd.jpeg"><img src="http://www.jlnv2.local/temp/temp513caca73b8da.jpeg"><br>';
$pattern = '#src="([^"]+/temp/temp[a-z0-9]{13}\.jpeg)"#';
    
preg_match( '@src="([^"]+)"@' , $text, $match );
$src = array_pop($match);

echo $src;
于 2021-11-23T17:29:43.873 回答