1

30分使っpreg_match_allてみたけど無理っぽい。

基本的に$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}\.jpegsrc値のフィルターです

迅速な正規表現テストには、 http: //regexpal.com/などのオンラインツールを使用してください

于 2013-03-10T16:17:23.293 に答える
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 に答える
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 に答える
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

これを試して:

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

var_dump($matches);
于 2013-03-10T16:18:26.683 に答える