[RESOLU] regex exposant/

Eléphanteau du PHP | 34 Messages

11 août 2016, 17:40

bonjour,
J'ai crée un fonction qui me permettrais de mettre en exposant les caractères après un ^ :
if(preg_match_all("/[^[[:blanck:]]|^\^]+\^[[:blanck:]]/",$math,$match_math)) 
    { 
        foreach ($match_math as $v1_math) {
			foreach ($v1_math as $c_math=>$v2_math) {
				$sup = strstr($v2_math, '^');
				$sup = str_replace('^', '', $sup);
				$replacement_math = "<SUP>".$sup."</SUP>";
		      	$math = str_replace($v2_math, $replacement_math, $math);
		    }
  		}
    }
et seulement bah... ça ne marche pas du tout :cry:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

11 août 2016, 18:30

Bonjour,

As tu testé ta regex ?
Car "blanck", ça me parait bizarre
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 176 Messages

11 août 2016, 18:33

Bonjour,

Je ne suis pas expert en regex mais ":blanck:" ne me dit absolument rien pour les regexs, en tout cas ce n'est pas reconnu par PHP
Warning: preg_match_all(): Compilation failed: unknown POSIX class name at offset 5 in C:\wamp\www\test.php on line 5
Je te propose donc la solution suivante
$matchs = array();
	$string = "2^315 = 4<br>3^215 = 9<br>4^22 = 16<br>5^2456a4 = 25";
	
	preg_match_all("/\^\[0-9]+/",$string,$matchs);
	foreach($matchs[0] as $match)
	{
		$currentMatch = substr($match, 1); //suppression du ^
		$string = str_replace($match,"<sup>$currentMatch</sup>", $string);
	}
	
	echo $string;
Output :
Image

Elle est encore améliorable notamment car ma regex ne recherche que les nombres.
Cordialement
Naroth

Eléphanteau du PHP | 34 Messages

11 août 2016, 18:43

Ah oui en effet ce n'est pas blanck mais blank #-o
if(preg_match_all("/[^[:blank:]|^\^]+\^[^[:blank:]]/",$math,$match_math)) 
    { 
        foreach ($match_math as $v1_math) {
			foreach ($v1_math as $c_math=>$v2_math) {
				$sup = strstr($v2_math, '^');
				$sup = str_replace('^', '', $sup);
				$replacement_math = "<SUP>".$sup."</SUP>";
		      	$math = str_replace($v2_math, $replacement_math, $math);
		    }
  		}
    }
Mais cela ne marche toujours pas (ça supprime mon expression et arrête d’exécuter le code).
Naroth ton code me pose un problème : j'aimerais que a^x marche et en faite que n'importe_quel_caracteres_sauf_blanc^n'importe_quel_caracteres_sauf_blanc marche (et pas seulement les nombres)

Eléphanteau du PHP | 34 Messages

11 août 2016, 18:47

En faite c'était tout simple, je me fatiguait à compléter ma regex pour rien :
if(preg_match_all("/\^[^[:blank:]]+/",$math,$match_math)) 
    { 
        foreach ($match_math as $v1_math) {
			foreach ($v1_math as $c_math=>$v2_math) {
				$sup = strstr($v2_math, '^');
				$sup = str_replace('^', '', $sup);
				$replacement_math = "<SUP>".$sup."</SUP>";
		      	$math = str_replace($v2_math, $replacement_math, $math);
		    }
  		}
    }
ça marche presque : cela ne s'arrête pas quand il y a un espace...

Eléphanteau du PHP | 34 Messages

11 août 2016, 21:43

personne pour améliorer ma regex ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

11 août 2016, 23:43

Modération :
Les "up" sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 34 Messages

12 août 2016, 09:26

ok d'accord, désoler je suis nouveau je ne savais pas ! :(

Édite : j'y suis arrivé : "/\^\S+/" et le problème venait aussi du reste de ma fonction qui ajoutais des balises html font qui contenait elles des espaces... D'ailleurs si quelqu'un connait une regex qui dit tout sauf une balise html quelconque ça m’intéresse toujours..!
Modifié en dernier par azzeryx le 12 août 2016, 13:40, modifié 1 fois.

ViPHP
ViPHP | 1996 Messages

12 août 2016, 13:22

Essayes cela :
<?php
$matchs = array();
$string = "2^315 = 4<br>3^215 = 9<br>4^22 = 16<br>5^2456a4 = 25";
if (preg_match_all("#(\w+)\^(\w+)#i",$string,$matchs)) {
	foreach($matchs[0] as $i => $match) :
		$string = $matchs[1][$i]."<SUP>".$matchs[2][$i]."</SUP>";
		echo $string."<br />";
	endforeach;
}	
?>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr