[RESOLU] regex exposant/

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] regex exposant/

Re: regex exposant/

par Aureusms » 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;
}	
?>

Re: regex exposant/

par azzeryx » 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..!

Re: regex exposant/

par @rthur » 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.

Re: regex exposant/

par azzeryx » 11 août 2016, 21:43

personne pour améliorer ma regex ?

Re: regex exposant/

par azzeryx » 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...

Re: regex exposant/

par azzeryx » 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)

Re: regex exposant/

par Naroth » 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.

Re: regex exposant/

par @rthur » 11 août 2016, 18:30

Bonjour,

As tu testé ta regex ?
Car "blanck", ça me parait bizarre

regex exposant/

par azzeryx » 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: