[RESOLU] souligné

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] souligné

Re: souligné

par Saian » 03 sept. 2022, 17:17

Code : Tout sélectionner

$pattern = '/<p markdown="1">(.*?)<\/p>/'; $replacement = '$1<br/>';
Il me semble que par défaut en php la chaîne sujet est traitée comme une seule ligne et que les retours à la ligne ne devraient donc pas poser de problème.

EDIT : en fait ça fonctionne avec le modifier pcre dotall.

Code : Tout sélectionner

$pattern = '/<p markdown="1">(.*?)<\/p>/s';
s (PCRE_DOTALL)
Avec cette option, le métacaractère point (.) remplace n'importe quel caractère, y compris les nouvelles lignes. Sans cette option, le caractère point ne remplace pas les nouvelles lignes. Cette option est équivalente à l'option Perl /s. Une classe de caractères négative telle que [^a] acceptera toujours les caractères de nouvelles lignes, indépendamment de cette option.
https://www.php.net/manual/fr/reference ... ifiers.php

Re: souligné

par Sylvain255 » 03 sept. 2022, 14:48

à noter que truc peut être multiligne

Re: souligné

par Sylvain255 » 03 sept. 2022, 14:46

bon je n'en ai pas encore fini maintenant je voudrais remplacer <p markdown="1">truc</p> en truc<br /> j'ai tout essayé mais je n'y arrive pas

Re: souligné

par Sylvain255 » 03 sept. 2022, 14:29

j'ai trouvé en fait je faisais ton expression régulière après l'opération sur le domdocument donc j'avais des <p markdown="1"> (donc pas remplacés) et après je lançais markdown donc le markdown=1 disparaissait et je ne m'en rendais pas compte, ça marche merci

Re: souligné

par Saian » 03 sept. 2022, 14:17

https://regexr.com/6t8hh
Peut être ?

Code : Tout sélectionner

$pattern = '/<p>(\*|\||-|_)(.*)<\/p>/gm';

Re: souligné

par Sylvain255 » 03 sept. 2022, 14:16

non les <p></p> sont sur la même ligne et les * sont juste après le <p>
je t'ai donné mon exemple
apparemment il y a plus de caractères spéciaux en regexp j'ai fait ça :
$contenu=preg_replace('/\<p\>(\*|\||\-|\_)(.*?)\<\/p\>/', '$2'."\n", $contenu);
mais ça ne marche pas non plus

Re: souligné

par Saian » 03 sept. 2022, 14:13

Alors la ça pourrait venir du fait que les <p></p> ne sont pas sur la même ligne... peut être avec un modificateur PCRE m pour multiligne.
A noter aussi si le caractère *, -, _, | n'est pas juste après le <p> l'expression ne va effectivement pas fonctionner.
Il me faudrait un échantillon réel du contenu à modifier pour voir ce qui ne va pas dans l'expression.
Tu as des sites comme https://regexr.com/ qui te permettent de tester tes regex.

PS : pour le ? absent, au pire ça sélectionnerait tout du premier <p> au tout dernier </p>.

Re: souligné

par Sylvain255 » 03 sept. 2022, 14:09

je vois que dans la deuxième expression tu as mis (.*) alors que dans la première tu avais mis (.*?) ça ne peut pas venir de là ?

Re: souligné

par Sylvain255 » 03 sept. 2022, 14:08

toujours pareil, ça ne fonctionne pas ! ah pas faciles ces expressions régulières !

Re: souligné

par Saian » 03 sept. 2022, 14:06

Essaie comme ça

Code : Tout sélectionner

$replacement = '$2'."\n";

avec la version précédente $2 est surement interprété comme une variable inexistante.

Re: souligné

par Sylvain255 » 03 sept. 2022, 14:05

j'ai fait :
$contenu=preg_replace('/<p>(\*|\||-|_)(.*)<\/p>/', "$2\n", $contenu);
mais ça ne remplace rien !

Re: souligné

par Saian » 03 sept. 2022, 14:02

Code : Tout sélectionner

$pattern = '/<p>(\*|\||-|_)(.*)<\/p>/'; $replacement = "$2\n";

L'utilisation des " en place des ' n'est pas innocente, elle permet au \n d'être interprété comme un retour chariot.

Re: souligné

par Sylvain255 » 03 sept. 2022, 14:01

même le | en remplacement de l'* désolé je sais ça fait bcps

Re: souligné

par Sylvain255 » 03 sept. 2022, 13:59

ah je me suis trompé en fait je veux remplacer <p>*truc</p> en *truc\n (l'étoile est le vrai caractère étoile et \n est le retour à la ligne
à noter que je veux la mm chose avec - et _ en remplacement de l'*
en fait c'est que je cherche pour un client à cumuler le tinymce avec php-markdown
merci d'avance

Re: souligné

par Saian » 03 sept. 2022, 13:53

Code : Tout sélectionner

$pattern = '/<p>(.*)<\/p>/'; $replacement = '$1<br/>';

Quelque chose dans le genre, à adapter aux cas particuliers que tu pourrais rencontrer.

A noter le \ devant le / car le slash est utilisé ici comme délimiteur du regex.