ユーザーが画像を挿入できる、または挿入できない投稿の本文があります。投稿でその画像が出現するたびに取得する必要があります。それがパターンです:
<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> </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> </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]
コメントを追加