RegExp - Empecher de prendre certains patterns

RegExp - Empecher de prendre certains patterns - PHP - Programmation

Marsh Posté le 26-04-2006 à 14:54:47    

j'ai un regexp comme ceci:  
 

Code :
  1. <a href="([^"]+)">([^<]+)</a>


 
 
ce qui me permet de requiperer tous les liens d'un site. mais  je voudrais recupere ceux qui ne commencent pa par http:// ou mailto: ou ftp://  c possible ?


Message édité par red faction le 26-04-2006 à 14:58:43
Reply

Marsh Posté le 26-04-2006 à 14:54:47   

Reply

Marsh Posté le 26-04-2006 à 15:32:15    

oui il faut que tu utilises une "assertion avant négative"!
Une page de doc qui sera plus claire que mes explications :o
http://www.expreg.com/assertion2.php
edit: dans ton cas ça fait:

<a href="(?!(http|ftp|mailto))([^"]+)">([^<]+)<\/a>


Message édité par anapajari le 26-04-2006 à 15:37:32
Reply

Marsh Posté le 26-04-2006 à 16:36:50    

ok merci ca fonctionne ... dans mon logiciel de test de regexp
 
ereg_replace lui n'a pas l'air d'apprécier tres fort :S

Reply

Marsh Posté le 26-04-2006 à 16:42:03    

preg_replace

Reply

Marsh Posté le 26-04-2006 à 16:56:08    

ok javais essaye comme ca juste en le remplacant le nom
ca ne marchait plus du tout , jai ete voir qq exemple et jai rajoute \ au debut et a la fin maintenant ca marche nikel
 
merci
 
au fait pq faut til c fameux  \ :??:

Reply

Marsh Posté le 26-04-2006 à 17:12:33    

c'est pas forcément \ tu peux mettre n'importe quel caractère.
En fait tu définis ton masque en le délimitant par deux caractères identiques.
Personellement j'utilise plutôt le slash, certains préfèrent #,@ ou encore %

Reply

Marsh Posté le 26-04-2006 à 17:59:22    

je comprends pa vraiment  
 
pourquoi delimiter ? la fin de la chaine (\0) et le debut ne suffisent-ils pas ?
 
et comment ce fait-il que ce caractere soit variable ? comment fait til pour le detecter alors ?
 

Reply

Marsh Posté le 26-04-2006 à 19:25:10    

Le premier caractere définit le délimiteurs de masque
Le masque sera donc compris entre le premier caractere et sa prochaine occurence non despecialisée (non précédée de \)
Suite a cette 2eme occurence se trouve les options de recherche : case sensitive (i), multilignes (m), ungreedy (u), \n\r inclus dans . avec l'option s etc ...


Message édité par afbilou le 26-04-2006 à 19:26:26
Reply

Marsh Posté le 27-04-2006 à 11:46:46    

ok merci pour lexplication
 
un ptit probleme cependant,
 
si jessaie de remplacer le code suivant  
<a href="productandservices">back to product &amp; services</a>
 
regexp: preg_replace('/<a href="(?!(http|mailto))([^"]+)">([^<]+)<\/a>/'
 
cela ne fonctionne par a cause du &amp; .... pourquoi ? il y a pourtant un [^<]+ qui devrait uniquement se terminer qd on rencontre le <

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed