0

プロジェクトで使用したいWebページのソースコードがあります。このコードで画像リンクを使用したいと思います。そこで、PHPで正規表現を使用してこのリンクにアクセスしたいと思います。

それでおしまい:

img src = "http://imagelinkhere.com" class = "image"

このような行は1つだけです。私の論理は、間の文字列を取得することです

="

"class =" image "

文字。

どうすれば正規表現でそれを行うことができますか?どうもありがとうございます。

4

6 に答える 6

3

HTMLには使用しないでくださいRegex..試してみてくださいDomDocument

$html = '<html><img src="http://imagelinkhere.com" class="image" /></html>';

$dom = new DOMDocument();
$dom->loadHTML($html);
$img = $dom->getElementsByTagName("img");

foreach ( $img as $v ) {
    if ($v->getAttribute("class") == "image")
        print($v->getAttribute("src"));
}

出力

http://imagelinkhere.com
于 2012-12-13T09:19:16.193 に答える
1

使用する

.*="(.*)?" .*

preg replaceを使用すると、最初の正規表現グループ(\ 1)のURLのみが提供されます。

完全なので、次のようになります

$str='img src="http://imagelinkhere.com" class="image"';
$str=preg_replace('.*="(.*)?" .*','$1',$str);
echo $str;

->

http://imagelinkhere.com

編集:または、Babaのアドバイスに従って、DOMパーサーを使用します。正規表現を使用してhtmlを解析する場合、正規表現は頭痛の種になることを覚えています。

于 2012-12-13T09:16:21.390 に答える
1
preg_match("/(http://+.*?")/",$text,$matches);
var_dump($matches);

リンクは$matchesにあります。

于 2012-12-13T09:16:21.723 に答える
0

これを行うにはいくつかの方法があります:

1.シンプルなHTMLで私が好むSimpleHTMLDomパーサーを使用でき ます

2.preg_matchも使用できます

$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" class="image" />';
$array = array();
preg_match( '/src="([^"]*)"/i', $foo, $array ) ;

このスレッドを参照してください

于 2012-12-13T09:16:06.557 に答える
0

ひづめの音が聞こえるので、正規表現ではなくDOM解析を使用しました。

$dom = new DOMDocument();
$dom->loadHTMLFile('path/to/your/file.html');
foreach ($dom->getElementsByTagName('img') as $img)
{
    if ($img->hasAttribute('class') && $img->getAttribute('class') == 'image')
    {
        echo $img->getAttribute('src');
    }
}

これにより、imgタグのsrc属性のみがエコーされます。class="image"

于 2012-12-13T09:27:43.997 に答える
-1

次のように、preg_match_allを使用してみてください。

preg_match_all('/img src="([^"]*)"/', $source, $images);

これにより、画像のすべてのURLが$images変数に含まれるはずです。正規表現が行うことはimg src、コード内のすべてのビットを検索し、引用符の間のビットと一致させることです。

于 2012-12-13T09:13:55.110 に答える