Page 1 sur 2

Problème REGEX particulière

Posté : 05 nov. 2010, 17:53
par 7804j
Bonjour,

J'ai en fait besoin d'une REGEX assez particulière pour l'intégrer dans un preg_replace.

Voici mon code actuel :

Code : Tout sélectionner

$remplacement1 = '#\'^[^<>(=")]\'(' . $donnees2['nom'] . ')#i'; $donnees = preg_replace ('' . $remplacement1 . '', '<a href="../quetes/' . $donnees2['nom_sans_caract_speciaux'] . '.htm>' . $1 . '</a>', $donnees );
Il ne fonctionne pas et la page ne se charge pas du tout avec, il doit sûrement y avoir une erreur de syntaxe.

J'ai donc deux questions :
- Quelle est l'erreur de syntaxe ?
- Que veut dire, selon vous, cette Regex ? Il ne me semble pas qu'elle soit correcte, et j'attend, avant de vous dire ce que j'attend d'elle, de savoir comment vous l'interprétez.

Merci d'avance,

7804j

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 18:01
par stealth35
il a pas l'air bon le truc, ta un de phrase j'ai l'impression que le premier ^ est de trop et les \' c'est un peu bizarre

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 18:19
par Berzemus
- Quelle est l'erreur de syntaxe ?
S'il y en à une, Php devrait la signaler. Si php ne signale rien, c'est soit qu'il est mal configuré, soit qu'il n'y a pas d'erreurs de syntaxe.
-Que veut dire, selon vous, cette Regex ? Il ne me semble pas qu'elle soit correcte, et j'attend, avant de vous dire ce que j'attend d'elle, de savoir comment vous l'interprétez.
Je l'interprète comme venant de quelqu'un n'y connaissant pas grand chose en expressions régulières.

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 18:32
par 7804j
Voici ce que me dit PHP, qui ne m'avance pas à grand chose, peut-être y comprendras-tu mieux : Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /home/dofusorg/public_html/quetes/quetes.php on line 35

J'ai modifié mon code comme ceci, mais il ne fonctionne toujours pas :

Code : Tout sélectionner

$remplacement1 = '#[^<>(=")](' . $donnees2['nom'] . ')#i'; $donnees = preg_replace ('' . $remplacement1 . '', '<a href="../quetes/' . $donnees2['nom_sans_caract_speciaux'] . '.htm>' . $1 . '</a>', $donnees );

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 18:57
par popy
$remplacement1 = '#[^<>\(="\)](' . preg_quote($donnees2['nom'], '#') . ')#i';
$donnees = preg_replace($remplacement1, '<a href="../quetes/' . $donnees2['nom_sans_caract_speciaux'] . '.htm>\\1</a>', $donnees );
Et donc, ta regexp remplace $donnees2['nom'] précédé d'un caractère quelquonque (hors <>(=")) pour le wrapper dans un lien vers ../quetes/' . $donnees2['nom_sans_caract_speciaux'] . '.htm

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 19:15
par 7804j
Ton code détecte effectivement $donnees2['nom'], mais il transforme tout ce qui suit sur la page en lien géant. Je pense donc qu'il y a un bug.

De plus, j'avais mis $1 pour que la partie visible du lien soit la même que ce qui a été remplacé, mais tu l'as modifié :/

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 19:19
par popy
Mais tu veux faire quoi en fait ?

Et ton $1 ne servais a rien la ou il était.

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 19:32
par 7804j
J'ai des articles, et j'aimerais repérer toute une série de mots pour pouvoir les transformer en lien vers d'autres articles (comme wikipedia).

Tu avais très bien compris ce que je voulais faire, mais ton code ne fonctionnait pas, il transformait tout ce qui suit le mot en question en lien (donc ne fermait pas la balise </a>) ;)

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 19:38
par popy
Dans ce cas il sers a quoi ton [^<>\(="\)] ?

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 19:39
par popy
lol, j'ai vu l'erreur. En fait, c'est toi qui a oublié le " fermant après l'url.
$donnees = preg_replace(
	'/' . preg_quote($donnees2['nom'], '/') . '/i',
	'<a href="../quetes/' . $donnees2['nom_sans_caract_speciaux'] . '.htm">' . $donnees2['nom'] .'</a>',
	$donnees
);
 

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 20:41
par 7804j
Ouf !!! Merci !!

J'ai demandé ça sur plusieurs forums, mais je suis content que tu aies finalement réussi à m'aider :)

Re: Problème REGEX particulière

Posté : 05 nov. 2010, 20:43
par stealth35
du coup pourquoi pas faire un simplement str_replace ???

Re: Problème REGEX particulière

Posté : 08 nov. 2010, 11:30
par popy
parce que /i ? Du coup str_ireplace serait mieux adapté.

Re: Problème REGEX particulière

Posté : 08 nov. 2010, 11:38
par stealth35
oui, ou si il cherche a remplacer un mot et non pas une chaine, il va falloir utiliser la limite du mot (\b) dans le regexp

Re: Problème REGEX particulière

Posté : 08 nov. 2010, 17:44
par 7804j
En fait, j'aurai une autre question concernant les REGEX.

Il me faudrait une REGEX qui cherche, dans un gros texte, toutes les occurrence de $donnees['nom'] qui ne sont PAS dans du code HTML ou qui ne sont PAS des liens.

J'ai trouvé sur internet une regex qui cherche tout ce qui n'est pas du html, mais ce n'est pas suffisant, il faudrait que cela détecte aussi les liens (la partie entre le <a> et le </a>) : (?<=^|>)[^><]+?(?=<|$)

Merci d'avance.