簡體   English   中英

使用 preg_match_all 獲取包含文本的 attr 標記

[英]Get attr tag with preg_match_all that contains a text

如何在帶有圖像的文本字符串中獲取 ALT 屬性,使用這個 function 我得到了 src,但我也想得到 alt

<?php 
$text = "Lorem ipsum dolor sit amet <img alt='my alt text' src='1.jpg' />  consectetur adipiscing elit, blandit quis aliquam integer neque turpis vel, ullamcorper nunc erat potenti dui vitae. Nunc tristique habitasse convallis congue praesent ultricies nam imperdiet netus, eleifend libero velit per maecenas sagittis vestibulum rhoncus felis tortor, etiam duis at sem dictumst vulputate nisi dignissim. Pharetra condimentum ultrices eleifend potenti eget blandit tempus dui class lectus magna vehicula, fames a ad ac commodo pulvinar aliquet augue semper venenatis massa, litora nascetur nam arcu et diam nec varius sollicitudin eu tristique."
preg_match_all('/<img.+?src=[\'"]([^\'"]+)[\'"].*?>/i', $text, $matches);
$src = $matches[1][0]; // get attr 'src'

但我也想要ALT,我怎么能用類似的表達呢?

嘗試這種方式來捕獲 alt 和 src

<?php
$re = '/<img.*?alt=\'(.*?)\' src=[\'"]([^\'"]+)[\'"].*?>/m';
$str = 'Lorem ipsum dolor sit amet <img alt=\'my alt text\' src=\'1.jpg\' />  consectetur adipiscing elit, blandit quis aliquam integer neque turpis vel, ullamcorper nunc erat potenti dui vitae. Nunc tristique habitasse convallis congue praesent ultricies nam imperdiet netus, eleifend libero velit per maecenas sagittis vestibulum rhoncus felis tortor, etiam duis at sem dictumst vulputate nisi dignissim. Pharetra condimentum ultrices eleifend potenti eget blandit tempus dui class lectus magna vehicula, fames a ad ac commodo pulvinar aliquet augue semper venenatis massa, litora nascetur nam arcu et diam nec varius sollicitudin eu tristique."
';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
print_r($matches);

?>

工作演示: https://3v4l.org/FK3nd

這是一個帶有占位符的變體,我發現它可以更輕松地處理結果:

$re = '/(<img.*alt=\'(?<alt>.*)\'|src=\'(?<src>.*)\'.*\/>)/mU';
$str = 'Lorem ipsum dolor sit amet <img alt=\'my alt text\' src=\'1.jpg\' />  consectetur adipiscing elit, blandit quis aliquam integer neque turpis vel, ullamcorper nunc erat potenti dui vitae. Nunc tristique habitasse convallis congue praesent ultricies nam imperdiet netus, eleifend libero velit per maecenas sagittis vestibulum rhoncus felis tortor, etiam duis at sem dictumst vulputate nisi dignissim. Pharetra condimentum ultrices eleifend potenti eget blandit tempus dui class lectus magna vehicula, fames a ad ac commodo pulvinar aliquet augue semper venenatis massa, litora nascetur nam arcu et diam nec varius sollicitudin eu tristique.';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

結果:

array(2) {
  [0]=>
  array(4) {
    [0]=>
    string(22) "<img alt='my alt text'"
    [1]=>
    string(22) "<img alt='my alt text'"
    ["alt"]=>
    string(11) "my alt text"
    [2]=>
    string(11) "my alt text"
  }
  [1]=>
  array(6) {
    [0]=>
    string(14) "src='1.jpg' />"
    [1]=>
    string(14) "src='1.jpg' />"
    ["alt"]=>
    string(0) ""
    [2]=>
    string(0) ""
    ["src"]=>
    string(5) "1.jpg"
    [3]=>
    string(5) "1.jpg"
  }
}

根據您的詢問:

   $text = "Lorem ipsum dolor sit amet <img alt='my alt text' src='1.jpg' />  consectetur adipiscing elit, blandit quis aliquam integer neque turpis vel, ullamcorper nunc erat potenti dui vitae. Nunc tristique habitasse convallis congue praesent ultricies nam imperdiet netus, eleifend libero velit per maecenas sagittis vestibulum rhoncus felis tortor, etiam duis at sem dictumst vulputate nisi dignissim. Pharetra condimentum ultrices eleifend potenti eget blandit tempus dui class lectus magna vehicula, fames a ad ac commodo pulvinar aliquet augue semper venenatis massa, litora nascetur nam arcu et diam nec varius sollicitudin eu tristique.";

// array of attributes
$attr = [];

// src attribute
   preg_match_all('/<img.+?src=[\'"]([^\'"]+)[\'"].*?>/i', $text, $matches);
   array_push($attr, $matches[1][0]);

// alt attribute
   preg_match_all('/<img.+?alt=[\'"]([^\'"]+)[\'"].*?>/i', $text, $matches);
   array_push($attr, $matches[1][0]);

// result
echo '<pre>';
print_r($attr);
echo '</pre>';  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM