Problème REGEX particulière

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 : Problème REGEX particulière

Re: Problème REGEX particulière

par 7804j » 09 nov. 2010, 17:26

Bon, ré-expliquons les chose d'une autre manière.

C'est toujours le même sujet, mais j'ai besoin d'une autre REGEX. Je ne fais donc pas d'autre topic pour cela.

Sur mon site, actuellement, j'ai un article qui s'appelle "Nid du Kwakwa". J'aimerai donc que toutes les occurrences de tous les articles du site où on trouve "Nid du kwakwa" se transforment en lien : "<a href="../donjons/nid-du-kwakwa.htm">Nid du Kwakwa</a>".
Mais si je met une image comme ceci : "<img src="../image.png" alt="Nid du Kwakwa">", l'image va se transformer en lien (<img src="../image.png" alt="<a href="../donjons/nid-du-kwakwa.htm">Nid du Kwakwa</a>">), ou si j'écris un article en mettant déjà des lien moi même, et que j'applique la fonction, cela va donner un lien dans un lien (<a href="../donjons/nid-du-kwakwa.htm"><a href="../donjons/nid-du-kwakwa.htm">Nid du Kwakwa</a></a>).

Il me faudrait donc quelque chose qui permette d'éviter cela.

Re: Problème REGEX particulière

par Berzemus » 09 nov. 2010, 10:29

En fait, j'aurai une autre question concernant les REGEX.
Autre question, autre sujet :wink:

Re: Problème REGEX particulière

par popy » 09 nov. 2010, 09:29

Ben en fait c'est "n'importe ou dans du html sauf dans un lien" vu que c'est pour faire des liens sur des mots (une sorte de lexique quoi)

Mais c'est sûr que c'est pas évident.

Re: Problème REGEX particulière

par stealth35 » 08 nov. 2010, 23:23

@stealth35: a priori, tous
c'est le "ou dans du HTML" qui me perturbe moi, dans un lien ok mais dans d'autre balise...

Re: Problème REGEX particulière

par popy » 08 nov. 2010, 23:08

@stealth35: a priori, tous
@7804j : RTFM ?

Re: Problème REGEX particulière

par 7804j » 08 nov. 2010, 19:33

Et si tu adaptes avec mon ancien code, ça donne quoi ? Il y a plein de fonctions que je ne connais pas :/

Re: Problème REGEX particulière

par stealth35 » 08 nov. 2010, 19:32

Je vais être plus précis.

Actuellement, j'utilise cela pour faire des remplacements :
$remplacement1 = '#[^<>\(="\)](' . preg_quote($donnees2['nom'], '#') . ')#i';
$donnees = preg_replace($remplacement1, ' <a href="../donjons/' . $donnees2['nom_sans_caract_speciaux'] . '.htm">\\1</a>', $donnees );
Mais c'est vraiment pas fiable, y'a plein de problèmes. Ce que je voudrai, c'est que le remplacement ne se fasse pas s'il s'agit de quelque chose qui est déjà dans un lien, ou dans du HTML
quand tu dis dans du html c'est collé au texte ou pas ?

si je recherche "bonjour"

<p>bonjour</p>
<p>boujour machin</p>
bonjour<p>machin</p>

laquel est valide la dedans ?

Re: Problème REGEX particulière

par popy » 08 nov. 2010, 19:19

Effectivement, le DOM c'est pas adapté.

Pour un lexique on avait fait la chose en deux étapes, avec un premier preg qui matche les zones hors tag :
$content = preg_replace_callback('/(^|>)([^<]*)/', array(&$this, 'parseContent'), $content);

Re: Problème REGEX particulière

par 7804j » 08 nov. 2010, 17:56

Je vais être plus précis.

Actuellement, j'utilise cela pour faire des remplacements :
$remplacement1 = '#[^<>\(="\)](' . preg_quote($donnees2['nom'], '#') . ')#i';
$donnees = preg_replace($remplacement1, ' <a href="../donjons/' . $donnees2['nom_sans_caract_speciaux'] . '.htm">\\1</a>', $donnees );
Mais c'est vraiment pas fiable, y'a plein de problèmes. Ce que je voudrai, c'est que le remplacement ne se fasse pas s'il s'agit de quelque chose qui est déjà dans un lien, ou dans du HTML

Re: Problème REGEX particulière

par stealth35 » 08 nov. 2010, 17:46

pour en faire quoi apres ?
pour parser du HTML on utilise DOMDocument

Re: Problème REGEX particulière

par 7804j » 08 nov. 2010, 17:44

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.

Re: Problème REGEX particulière

par stealth35 » 08 nov. 2010, 11:38

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

par popy » 08 nov. 2010, 11:30

parce que /i ? Du coup str_ireplace serait mieux adapté.

Re: Problème REGEX particulière

par stealth35 » 05 nov. 2010, 20:43

du coup pourquoi pas faire un simplement str_replace ???

Re: Problème REGEX particulière

par 7804j » 05 nov. 2010, 20:41

Ouf !!! Merci !!

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