regexp

regexp - PHP - Programmation

Marsh Posté le 09-10-2009 à 16:26:31    

Bonjour,
 
Je tente déséspérement de changer le chemin d'une image et je suis bloqué sur l'antislash :
 
 

Code :
  1. $html = "code html avant <img src='c:\\user.png' />code html après";
  2. if(preg_match_all("#<img[^>]+?src=['\"]+([^'\"]*)['\"][^>]*>#i", $html, $matches)){
  3. foreach($matches[1] as $filename){
  4.  $html preg_replace("#(<img[^>]+?src=['\"]+)".$filename."(['\"][^>]+> )#i", '\\1cid:465\\2', $html);
  5. }
  6. }


 
Et j'ai commen erreur : Warning: preg_replace() [function.preg-replace]: Compilation failed: PCRE does not support \L, \l, \N, \U, or \u at offset 24
 
il considère mon \\u comme le la séquence \u qui est non supportée par les pcre
 
http://www.pcre.org/pcre.txt :

Code :
  1. 5.  The  following Perl escape sequences are not supported: \l, \u, \L,
  2.        \U, and \N. In fact these are implemented by Perl's general string-han-
  3.        dling  and are not part of its pattern matching engine. If any of these
  4.        are encountered by PCRE, an error is generated.


 
quelqu'un a déjà résolu ceproblème ?
 
Bozocarzu.

Reply

Marsh Posté le 09-10-2009 à 16:26:31   

Reply

Marsh Posté le 09-10-2009 à 16:42:31    

J'ai trouvé une solution mais je pense qu'il y a mieux :
 
 

Code :
  1. $html = "code html avant <img src='c:\\user.png' />code html après";
  2. if(preg_match_all('/<img[^>]+?src=[\'"]+([^\'"]*)[\'"][^>]*>/i', $html, $matches)){
  3. $search_escape_PCRE = array("\\L", "\\l", "\\N", "\\u", "\\U" );
  4. $replacement_escape_PCRE = array("\\\L", "\\\l", "\\\N", "\\\u", "\\\U" );
  5. foreach($matches[1] as $filename){
  6.  $filename = str_replace($search_escape_PCRE, $replacement_escape_PCRE, $filename);
  7.  $html = preg_replace('#(<img[^>]+?src=[\'"]+)'.$filename.'([\'"][^>]+> )#i', '$1cid:toto$i$2', $html);
  8. }
  9. }


Message édité par bozocarzu le 09-10-2009 à 16:43:31
Reply

Marsh Posté le 22-10-2009 à 13:06:45    

Bonjour,
 
Ton preg_match_all() ne sert à rien.
 
Autant faire directement tes remplacements, preg_replace les fear autant de fois que le masque sera trouvé dans ta chaine.
 
Sinon, pour échapper ces caractères lorsqu'ils se situent dans un masque, il faut utiliser pre_quote()

Reply

Sujets relatifs:

Leave a Replay

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