expression reguliere

expression reguliere - PHP - Programmation

Marsh Posté le 01-06-2003 à 12:43:09    

qq m'avait donné sur un topic les regex qu'il utisait,mais je n'arrive pas a les faires marcher
 

 $search = array(
"/\[img\](http|https|ftp|mms)://(\S+)\[/img\]/si",
"/\[center\](.+?)\[/center\]/si",
"/\[left\](.+?)\[/left\]/si",
"/\[right\](.+?)\[/right\]/si",
"/\[justify\](.+?)\[/justify\]/si",
"/\[g\](.+?)\[/g\]/si",
"/\[i\](.+?)\[/i\]/si",
"/\[s\](.+?)\[/s\]/si",
"/\[X\](.+?)/si",
"/\[url=(http|https|ftp|mms)://(.+?)\](.+?)\[/url\]/si",
"/\[url=(\S+)\](.+?)\[/url\]/si",
"/\[url\](.+?)\[/url\]/si",
"/\[code\](.+?)\[/code\]/si",
"/  /",
"/\[#(.+?)\](.+?)\[/#(.+?)\]/si",
"/( |\r\n|\n|\r|:|;)(http|https|ftp|mms)://([^ !\'\"()\r\n]+)/i",
"/( |\r\n|\n|\r|:|\(|\))www\.([^ !\'\"()\r\n]+)/i",
"/( |\r\n|\n|\r|:|;)([^ !\'\"()\r\n;:]+)(@)([^ !\'\"()\r\n;]+)(\.)([^ !\'\"()\r\n;]+)/i",
"/(\r\n)/"
);
 
$replace = array(
"<img src=\"\\1://\\2\" alt=\"\\1://\\2\" title=\"\\1://\\2\" />",
"<div align=\"center\">\\1</div>",
"<div align=\"left\">\\1</div>",
"<div align=\"right\">\\1</div>",
"<div align=\"justify\">\\1</div>",
"<b>\\1</b>",
"<i>\\1</i>",
"<u>\\1</u>",
"<li>\\1</li>",
"<a href=\"\\1://\\2\" target=\"_blank\" class=\"lientopic2\">\\3</a>",
"<a href=\"http://\\1\" target=\"_blank\" class=\"lientopic2\">\\2</a>",
"<a href=\"\\1\" target=\"_blank\" class=\"lientopic2\">\\1</a>",
"<table width=\"90%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\" cellpadding=\"2\"><tr><td bgcolor=\"#FFFFFF\"><font face=\"Courier\" size=\"2\">\\1</font></td></tr></table>",
"  ",
"<font color=\"\\1\">\\2</font>",
"\\1<a href=\"\\2://\\3\" target=\"_blank\" class=\"lientopic2\">\\2://\\3</a>",
"\\1<a href=\"http://www.\\2\" target=\"_blank\" class=\"lientopic2\">www.\\2</a>",
"\\1<a href=\"mailto:\\2@\\4\\5\\6\" target=\"_blank\" class=\"lientopic2\">\\2@\\4\\5\\6</a>",
" <br />"
);
 


j'utilise cela:
 
$reponse = preg_replace($search,$replace,$reponse);
 
et ca me marque plein de message d'erreur:
 
 

Warning: Unknown modifier '/' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier 'c' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier 'l' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier 'r' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier 'j' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier 'g' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier '\' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier '\' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier '/' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier 'r' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier 'r' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier 'c' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier '#' in c:\www\forum\topic.php on line 266
 
Warning: Unknown modifier '/' in c:\www\forum\topic.php on line 266
 
et ca continue....


 
vous voyez pas d'ou viens le probleme ?

Reply

Marsh Posté le 01-06-2003 à 12:43:09   

Reply

Marsh Posté le 01-06-2003 à 12:48:38    

avec l'affichage des numéros de ligne, ca serait mieux...

Reply

Marsh Posté le 01-06-2003 à 12:49:40    

gizmo a écrit :

avec l'affichage des numéros de ligne, ca serait mieux...

la ligne 266 c'est celle la:  


$reponse = preg_replace($search,$replace,$reponse);

Reply

Marsh Posté le 01-06-2003 à 13:02:38    

ok, compris. remplace déjà tous les \\x par $x qui est la nouvelle syntaxe, ca devrait te montrer facilement ton erreur ;)

Reply

Marsh Posté le 01-06-2003 à 13:15:30    

gizmo a écrit :

ok, compris. remplace déjà tous les \\x par $x qui est la nouvelle syntaxe, ca devrait te montrer facilement ton erreur ;)

je crois que c'est ses regex qui ne sont pas bonne car j'ai remplacer une ligne pour tester:
 
$reponse = preg_replace("/\[g\](.+?)\[/g\]/si", "<b>\\1</b>", $reponse);
$reponse = preg_replace('/(\[g\])(.*?)(\[\/g\])/', "<b>\\2</b>", $reponse);
 
et la ca marche.Il avait oublié de mettre des parenthese.
 
finallement,je crois que je vais faire mes propres regex :D

Reply

Marsh Posté le 01-06-2003 à 13:19:33    

RAV

Reply

Marsh Posté le 01-06-2003 à 13:20:28    

Reply

Marsh Posté le 01-06-2003 à 13:22:55    


-> Rien A Voir
-> Rien A Vendre
-> demmeRdes toi maintenAnt sale Vulve
 
 :??:


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 01-06-2003 à 13:24:48    

simogeo a écrit :


-> Rien A Voir
-> Rien A Vendre
-> demmeRdes toi maintenAnt sale Vulve
 
 :??:  

:lol: merci
 
en effet RAV
 
le probleme venait de la:
 

Citation :

\[/g\]/ ->  \[\/g\]/

Reply

Marsh Posté le 01-06-2003 à 15:49:06    

j'ai un probleme avec cette expression:
 

/( |\r\n|\n|\r|:|;)(http|https|ftp|mms)\:\/\/([^ !\'\"()\r\n]+)/i


 
c'est pour detecter un lien,met ca detecte mal l'url.Cela se passe en general avec les caracteres avant l'url.
Vous voyez pas d'ou viens le problemes ?

Reply

Marsh Posté le 01-06-2003 à 15:49:06   

Reply

Marsh Posté le 01-06-2003 à 15:56:15    

je vois pas bien l'intérêt de ca: ( |\r\n|\n|\r|:|;)  en début de regexp.  
Et le reste m'a l'air assez tordu comme manière d'arreter la sélection.


Message édité par gizmo le 01-06-2003 à 15:56:53
Reply

Marsh Posté le 01-06-2003 à 16:05:45    

je profite de ce topic pour poser une ptite question qui a aucun rapport : c koa la fonction pour afficher le temps dexecution de toutes les requetes mysql executées ?
g cherché mais je trouve po  :sweat:

Reply

Marsh Posté le 01-06-2003 à 16:11:39    

gizmo a écrit :

je vois pas bien l'intérêt de ca: ( |\r\n|\n|\r|:|;)  en début de regexp.  
Et le reste m'a l'air assez tordu comme manière d'arreter la sélection.

ben j'en sais rien,je commence a aprendre les regex aujourd'hui.Si tu as un conseil,je veux bien :)
 
j'ai deja reussi a faire l'url lorsque c'est en debut de topic:
 

/^(http|https|ftp|mms)\:\/\/([^ !\'\"()\r\n]+)/i


 
maintenant il me manque lorsque l'url est au milieu du message.
 
tu voix pas comment faire?


Message édité par forummp3 le 01-06-2003 à 16:11:49
Reply

Marsh Posté le 01-06-2003 à 16:27:58    

orazur a écrit :

je profite de ce topic pour poser une ptite question qui a aucun rapport : c koa la fonction pour afficher le temps dexecution de toutes les requetes mysql executées ?
g cherché mais je trouve po  :sweat:  


y'a une fonction PHP pour ça ? m'etonnerait
a mon avis il faut se servir d'une classe de bench et poser un marqueur avant et en fin de requête  :)  
( http://www.phpteam.net/affiche.php?quoi=pear_bench1 )


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 01-06-2003 à 17:34:57    

forummp3 a écrit :

ben j'en sais rien,je commence a aprendre les regex aujourd'hui.Si tu as un conseil,je veux bien :)
 
j'ai deja reussi a faire l'url lorsque c'est en debut de topic:
 

/^(http|https|ftp|mms)\:\/\/([^ !\'\"()\r\n]+)/i


 
maintenant il me manque lorsque l'url est au milieu du message.
 
tu voix pas comment faire?

j'en ai marre,je trouve pas  :cry:

Reply

Marsh Posté le 01-06-2003 à 17:57:17    

heuuu si tu veux ... j'en ai une toute faite que j'avais choppée pour un projet  :whistle:


Message édité par simogeo le 01-06-2003 à 17:57:35

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 01-06-2003 à 18:07:45    

simogeo a écrit :

heuuu si tu veux ... j'en ai une toute faite que j'avais choppée pour un projet  :whistle:

je veux bien :)

Reply

Marsh Posté le 01-06-2003 à 18:15:13    

Code :
  1. $text_link = eregi_replace( "([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\" CLASS=\"lien2\">\\1://\\2\\3</a>", $text);


 
 [:southpark1]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 01-06-2003 à 18:20:14    

simogeo a écrit :

Code :
  1. $text_link = eregi_replace( "([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\" CLASS=\"lien2\">\\1://\\2\\3</a>", $text);


 
 [:southpark1]  

phpinfo.net non? :D
 

Reply

Marsh Posté le 01-06-2003 à 18:24:44    

forummp3 a écrit :

phpinfo.net non? :D


je ne me souviens plus exactement mais fort possible  :D


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 01-06-2003 à 18:29:02    

simogeo a écrit :

Code :
  1. $text_link = eregi_replace( "([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\" CLASS=\"lien2\">\\1://\\2\\3</a>", $text);




 
comment qu'elle est pourrie cette regexp
 [:ddr555]

Reply

Marsh Posté le 01-06-2003 à 18:33:50    

gizmo a écrit :


comment qu'elle est pourrie cette regexp
 [:ddr555]  


pourquoi  :??:


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 01-06-2003 à 18:36:41    

parce que pour elle, m://? c'est une url valide :sarcastic:

Reply

Marsh Posté le 01-06-2003 à 18:42:31    

c'est con ça :/


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 01-06-2003 à 20:37:29    

gizmo a écrit :

parce que pour elle, m://? c'est une url valide :sarcastic:  

tu crois que http://? c'est mieux :D
 
sinon t'as pas une idée pour ma regex ?

Reply

Marsh Posté le 01-06-2003 à 21:41:20    

non, mais bon, joce et les regexp... :sarcastic:
c'est pas très dur pourtant. il suffit juste de savoir ce que tu autorise comme type d'url.
Par exemple, cette regexp autorise toute url qui commence par http, https, ftp, mms ou www mais refuse les url avec login et mot de passe (utilisation du @) et les url internes (type http://localhost/).
 
/(((http|https|ftp|mms)\:\/\/){0,1}|www\.)(\w+?)(\.)([^!\"\'()\r\n ]+?)/
 
Y a moyen de faire plus restrictif ou plus permissift, mais ca allonge la regexep car on split les morceaux.

Reply

Marsh Posté le 01-06-2003 à 21:58:57    

gizmo a écrit :

non, mais bon, joce et les regexp... :sarcastic:
c'est pas très dur pourtant. il suffit juste de savoir ce que tu autorise comme type d'url.
Par exemple, cette regexp autorise toute url qui commence par http, https, ftp, mms ou www mais refuse les url avec login et mot de passe (utilisation du @) et les url internes (type http://localhost/).
 
/(((http|https|ftp|mms)\:\/\/){0,1}|www\.)(\w+?)(\.)([^!\"\'()\r\n ]+?)/
 
Y a moyen de faire plus restrictif ou plus permissift, mais ca allonge la regexep car on split les morceaux.

mais mon probleme c'est qu'il y a les reges pour les images,donc,si j'ai <img="http://www.site.com/ttt.jpg"> ca va me transforme ca en url :/

Reply

Marsh Posté le 02-06-2003 à 00:08:25    

bah dans ce cas, il faut savoir ce que tu permets: des url avec un espace devant ou non, derrière un :, etc... et sur ces bases tu construis le début de ta regexp.

Reply

Marsh Posté le 02-06-2003 à 08:51:18    

gizmo a écrit :

bah dans ce cas, il faut savoir ce que tu permets: des url avec un espace devant ou non, derrière un :, etc... et sur ces bases tu construis le début de ta regexp.

vu que j'ai commencer a aprendre hier,je metrise pas trop encore.En fait il faut qu'il y ait quelconque caractere avant,ensuite un espace,puis ta chaine.
mais je vois pas comment faire le debut de la chaine,car j'avais fais  (.*[:blank:]) mais ca a l'air de ne pas marcher :??:
peut etre que je m'y prend mal :/

Reply

Marsh Posté le 02-06-2003 à 09:30:00    

donc la chaine commence par un espace. il suffit donc de rajouter \s au début de la chaine.
 
mais ce que tu me dis n'est pas cohérent avec le fait d'avoir des url en début de post. Il faudrait plutôt éviter tous les caractères spéciaux qui sont repris dans les autres regexp.

Reply

Marsh Posté le 02-06-2003 à 10:45:49    

gizmo a écrit :

donc la chaine commence par un espace. il suffit donc de rajouter \s au début de la chaine.
 
mais ce que tu me dis n'est pas cohérent avec le fait d'avoir des url en début de post. Il faudrait plutôt éviter tous les caractères spéciaux qui sont repris dans les autres regexp.

pourquoi c'est incoherant?
Si le gars cherche un site,ou quelque et qu'on lui reponde seulement avec une url,ben ca marche.
Mais bon il y surement une meilleur solutions.

Reply

Marsh Posté le 03-06-2003 à 23:04:29    

gizmo a écrit :

non, mais bon, joce et les regexp... :sarcastic:
c'est pas très dur pourtant. il suffit juste de savoir ce que tu autorise comme type d'url.
Par exemple, cette regexp autorise toute url qui commence par http, https, ftp, mms ou www mais refuse les url avec login et mot de passe (utilisation du @) et les url internes (type http://localhost/).
 
/(((http|https|ftp|mms)\:\/\/){0,1}|www\.)(\w+?)(\.)([^!\"\'()\r\n ]+?)/
 
Y a moyen de faire plus restrictif ou plus permissift, mais ca allonge la regexep car on split les morceaux.


 
ton truc ne vérifie pas si c'est a la suite d'un mot, ds une image, en debut de post ...
 

Reply

Marsh Posté le 03-06-2003 à 23:19:46    

gizmo a écrit :

je vois pas bien l'intérêt de ca: ( |\r\n|\n|\r|:|;)  en début de regexp.  
Et le reste m'a l'air assez tordu comme manière d'arreter la sélection.


 
 
Peut etre tordu, mais c'est fonctionnel dans tous les cas ...
j'ai galéré a tester
 
et le debut de la regex, c'est tout simplememt que les scripts tournant sous win et linux interpretent différement le \n ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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