正規表現-このパターン<imgsrc = "/ storage / 5 / articles / pictures / 15_sdf8g.jpeg">を正しく取得するにはどうすればよいですか?

双性イオン

ユーザーが画像を挿入できる、または挿入できない投稿の本文があります。投稿でその画像が出現するたびに取得する必要があります。それがパターンです:

<img src="/storage/USER_ID/articles/pictures/FILENAME">

だから私はこの体を持っているとしましょう:

$body = "... Cras ut tristique est. Etiam porttitor elit velit, vitae consequat eros interdum ac. Nam in blandit ante.</p><p>&nbsp;</p><figure class="image"><img src="/storage/5/articles/pictures/1560534410321_a363bc0d804aec432567128ed10416ee.jpeg"></figure><p>Integer sed justo accumsan, consequat nulla at, tincidunt massa. Integer orna Etiam porttitor elit velit, vitae consequat eros interdum ac. Nam in blandit ante.</p><p>&nbsp;</p><figure class="image"><img src="/storage/5/articles/pictures/23456410321_a33456t604aec432567128ed10416ee.jpeg"></figure> j hgfjhf  jfhfj hgf jh786 876 8 76fgj tfyt u  ufgi uyu y gi iy gygg ...";

番号5とファイル名を取得したい1560534410321_a363bc0d804aec432567128ed10416ee.jpeg

と番号5とファイル名23456410321_a33456t604aec432567128ed10416ee.jpeg

したがって、このシナリオでは、私は、パターンは次のようにあるべきだと思う:任意の検索ファイル名の間の<img src="/storage/ 数の /articles/pictures/ ファイル名を ">

これは私がこれまでに持っているものです:

preg_match_all ('/<img src=\"\/storage\/(.*?)\/articles\/pictures\/(.*?)\.(.*?)\"\>/g', $body , $result);

このREGEXを改善して、に"置き換えられるシナリオを作成するにどうすればよい'ですか?

ローレンス・チェローネ

HTMLを正規表現で解析することは避けてください。

最初に必要な値に絞り込んでから、必要に応じてそれらに対して正規表現を実行することをお勧めします。

<?php
$body = '...';

$dom_err = libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHtml($body, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$xpath = new DOMXPath($dom);

$imgs = [];
foreach ($xpath->query("//figure/img") as $img) {
    $src = $img->getAttribute('src');

    if (preg_match('#/storage/(.*)/articles/pictures/(.*)#', $src, $result)) {
        $imgs[] = [
            'id' => $result[1],
            'name' => $result[2]
        ];
    }
}

libxml_clear_errors();
libxml_use_internal_errors($dom_err);

print_r($imgs);

結果:

Array
(
    [0] => Array
        (
            [id] => 5
            [name] => 1560534410321_a363bc0d804aec432567128ed10416ee.jpeg
        )

    [1] => Array
        (
            [id] => 5
            [name] => 23456410321_a33456t604aec432567128ed10416ee.jpeg
        )

)

デモ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ