1
votes

Obtenez la balise attr avec preg_match_all qui contient un texte

comment puis-je obtenir l'attribut ALT dans une chaîne de texte avec une image, avec cette fonction, j'obtiens le src, mais je veux aussi obtenir l'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'

Mais je veux aussi ALT , comment puis-je le faire avec une expression similaire?


1 commentaires

Vous feriez mieux d'utiliser quelque chose comme DOMDocument et loadHTML car il comprend la structure et le contexte des balises et attributs HTML. L'utilisation des expressions régulières est toujours ouverte aux erreurs et à de nombreuses restrictions sur la flexibilité du document.


3 Réponses :


0
votes

Selon votre demande:

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


0 commentaires

1
votes

Essayez de cette manière pour capturer alt et 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);

?>

DÉMO DE TRAVAIL: https://3v4l.org/FK3nd


2 commentaires

Mon contenu n'avait pas le caractère \ ', c'est pourquoi je n'ai pas toujours bien saisi les attributs.


Ensuite, rendez-le facultatif en ajoutant un ? après



1
votes

Voici une variante avec espace réservé qui, à mon avis, facilite le traitement des résultats avec:

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

Et les résultats:

$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);


1 commentaires

Mon contenu n'avait pas le caractère \ ', c'est pourquoi je n'ai pas toujours bien saisi les attributs.