Получить тег attr с помощью preg_match_all, который содержит текст - PullRequest
1 голос
/ 04 октября 2019

как я могу получить атрибут ALT в текстовой строке с изображением, с помощью этой функции я получаю 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, какя могу сделать это с похожим выражением?

Ответы [ 3 ]

1 голос
/ 04 октября 2019

Попробуйте этот способ перехватить 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

1 голос
/ 04 октября 2019

Вот вариант с заполнителем, который, как мне кажется, облегчает обработку результатов:

$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"
  }
}

0 голосов
/ 04 октября 2019

По вашему запросу:

<code>   $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 '
';
...