URL: https://linuxfr.org/forums/programmation-php/posts/je-suis-nul-en-expression-reguliere Title: Je suis nul en expression reguliere :( Authors: nexus5 Date: 2008年09月10日T20:57:16+02:00 Tags: Score: 2 Bonjour, J'ai beau lire des tutoriaux sur les expressions reguliéres... et ben j'y arrive pas, je seche et ca me pose des problèmes... j'ai 2 problèmes à resoudre mais je vais commencer par un dans l'espoir de resoudre le second tout seul comme un grand ;-) J'extrait des données d'un champ texte, si le champ est inferieur a 575 caracteres j'affiche tout, sinon je n'affiche que les 250 premiers et je fais un lien sur une autre page : if(strlen($row['texte']) < 575) { $texte= explode("\n",$row['texte']); } else { $texte = htmlentities(substr(html_entity_decode($row['texte'], ENT_QUOTES),0,249), ENT_QUOTES).' ...«a href="/index.cgi/contrast/httpS://linuxfr.org/forums/programmation-php/posts/actualite.php?entree='.$row['id_agenda'].'"»Lire la suite«/a»'; $texte = explode("\n", $texte); } foreach($texte as $value) { echo '«p»'.bbCode($value).'«/p»'."\n"; } Pour formater le texte l'utilisateur de la BD utilise des balises de type bbcode, qui sont transformées en balises html avec "ma" fonction bbCode (en partie honteusement pompée a divers endroit a cause des regexp... :) function bbCode($t) { £spaces£ £/spaces£ £spaces£ £/spaces£// faux titre h4 £spaces£ £/spaces£$t=str_replace("[titre]", "«span style=\"font-weight: bold; text-decoration:underline;\"»", $t); £spaces£ £/spaces£$t=str_replace("[/titre]", "«/span»", $t); £spaces£ £/spaces£ £spaces£ £/spaces£// gras £spaces£ £/spaces£$t=str_replace("[b]", "«span style=\"font-weight: bold;\"»", $t); £spaces£ £/spaces£$t=str_replace("[/b]", "«/span»", $t); £spaces£ £/spaces£ £spaces£ £/spaces£// italique £spaces£ £/spaces£$t=str_replace("[i]", "«span style=\"font-style: italic;\"»", $t); £spaces£ £/spaces£$t=str_replace("[/i]", "", $t); £spaces£ £/spaces£ £spaces£ £/spaces£// soulignement £spaces£ £/spaces£$t=str_replace("[u]", "«u»", $t); £spaces£ £/spaces£$t=str_replace("[/u]", "«/u»", $t); £spaces£ £/spaces£ £spaces£ £/spaces£// couleur £spaces£ £/spaces£$t=str_replace("[/color]", "", $t); £spaces£ £/spaces£$regCouleur="\[color= ?(([[:alpha:]]+)|(#[[:digit:][:alpha:]]{6})) ?\]"; £spaces£ £/spaces£$t=ereg_replace($regCouleur, "«span style=\"color: \1円\"»", $t); £spaces£ £/spaces£ £spaces£ £/spaces£// lien £spaces£ £/spaces£$regLienSimple="\[url\] ?([^\[]*) ?\[/url\]"; £spaces£ £/spaces£$regLienEtendu="\[url ?=([^\[]*) ?] ?([^]]*) ?\[/url\]"; £spaces£ £/spaces£if (ereg($regLienSimple, $t)) $t=ereg_replace($regLienSimple, "«a href=\"\1円\"»\1円", $t); £spaces£ £/spaces£else $t=ereg_replace($regLienEtendu, "«a href=\"\1円\" target=\"_blank\"»\2円", $t); £spaces£ £/spaces£ £spaces£ £/spaces£// mail £spaces£ £/spaces£$regMailSimple="\[email\] ?([^\[]*) ?\[/email\]"; £spaces£ £/spaces£$regMailEtendu="\[email ?=([^\[]*) ?] ?([^]]*) ?\[/email\]"; £spaces£ £/spaces£if (ereg($regMailSimple, $t)) $t=ereg_replace($regMailSimple, "«a href=\"mailto:\1円\"»\1円", $t); £spaces£ £/spaces£else $t=ereg_replace($regMailEtendu, "«a href=\"mailto:\1円\"»\2円", $t); £spaces£ £/spaces£ // Bloc des balises [list]-[/list] £spaces£ £/spaces£$t = preg_replace('`\[liste=(circle|disc|square|i)](.+?)\[/liste]`si','«ul»2ドル«/ul»',$t); £spaces£ £/spaces£$t = preg_replace('`\[liste](.+?)\[/liste]`si','«ul style="margin:5px 10px 5px 15px;"»1ドル«/ul»',$t); £spaces£ £/spaces£ £spaces£ £/spaces£// Bloc des balises [*] £spaces£ £/spaces£$t = preg_replace('`\[\*=(circle|disc|square|i)](.+?)`si','«li»2ドル',$t); £spaces£ £/spaces£$t = preg_replace('`\[\*](.+?)\[/\*]`si','«li»1ドル',$t); £spaces£ £/spaces£return $t; } Le problème est que si j'ai une balise bbcode non fermée dans les 250 premiers caractères, l'affichage part en vrille ou le code de la page n'est plus valide comment pourrais-je détecter qu'il y a [xx] dans mon fragment de texte et qu'il n'y a pas [/xx] et que dans ce cas, je fais autre chose ? Merci d'avance ++ PS: j'ai beau remplacer les "<" par des "«", j'ai une previsualisation un peu bizarre et des morceaux de code qui disparaisse ?

AltStyle によって変換されたページ (->オリジナル) /