[RESOLU] Comment conserver le texte avec 'preg_replace' ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Comment conserver le texte avec 'preg_replace' ?

Re: Comment conserver le texte avec 'preg_replace' ?

par terebenthine » 07 mai 2019, 14:12

@tesmet Je te remercie, trop tardivement, pour ton aide. :)

Re: Comment conserver le texte avec 'preg_replace' ?

par tesmet » 04 mai 2019, 00:43

Hello. Il serait peut-être bon d'expliquer les règles pour aider à mieux visualiser le besoin, sinon on peut fusionner la logique des 3 preg_replace() en une fonction preg_replace_callback()
 
$texte = preg_replace_callback(
  '/^\s*(?:#+\s*((Section|Article).*?)|(.+?))?\s*\R/m', // ^\s* et \s*\R pour émuler trim()
  function($match) {
    if( !empty($match[2]) && $match[2] == 'Section' ) return "<div class=\"section\">{$match[1]}</div>"; // section
    if( !empty($match[2]) && $match[2] == 'Article' ) return "<div class=\"article\">{$match[1]}</div>"; // article
    if( !empty($match[3]) ) return "<p>{$match[3]}</p>"; // paragraphe
    return ""; // vide pour détruire les lignes vides
  },
  $texte
);

echo htmlspecialchars($texte), '<hr>', $texte;

Comment conserver le texte avec 'preg_replace' ?

par terebenthine » 03 mai 2019, 19:41

Bonjour,

Comment conserver le texte avec 'preg_replace' ?

Dans la pratique...
$texte = <<<EOT
##### Section 1 : Section 1

###### Article 1

Bla

Bla

Bla

##### Section 2 : Section 2

###### Article 2

Bla

Bla

Bla

EOT;

$texte = '<p>'.preg_replace('/[\r\n]+/', '</p><p>', $texte).'</p>';

$texte = preg_replace('/<p>(\s*)(.*?)(\s*)<\/p>/m', '<p>$2</p>', $texte);

$texte = preg_replace('/<p.*?>#{1,}(\s)(Section)(.*?)<\/p>', '<div class="section">$2$3</div>', $texte);

echo $texte;
Or, mes deux sections reformatées s'affichent, *puis* les paragraphes. Or, je veux 'Section 1-> Article 1 (quand j'aurai trouvé la solution) -> Paragraphe', puis ' Section 2-> Article 2 -> Paragraphe,

J'ai essayé avec le quantificateur global 'g', qui ne plait pas à Php. 'm' ne change rien. J'ai essayé aussi avec 'preg_replace_callback", sans résultat.

(La solution ne passe pas par Markdown.)

Le nombre de croisillons ('#') peut être variable, empêchant le recours à 'str_replace'.

Merci pour votre aide.

Térébenthine