Regex PHP (new line)

Regex PHP (new line) - PHP - Programmation

Marsh Posté le 22-04-2018 à 01:42:48    

Bonjour,

 

Je cherche à match une nouvelle ligne suivie d'un texte. Mais absolument aucun moyen de match la nouvelle ligne. Je ne pourrai évidemment pas vous énumérer tout ce que j'ai pu tenter mais voilà le contexte :

 

Je fais tourner PHP 7.1.9 sur un serveur Apache 2.4.27, le tout dans Wamp 3.1.0 (64 bits) sur mon Windows 10.
C'est un fichier php (UTF-8, testé en format Windows et en format Unix) qui crée un autre fichier php (par conséquent UTF-8, testé en format Windows et en format Unix), je vous passe les détails mais en gros les variables suivantes sont ajoutées au fichier.php avec fwrite :

Code :
  1. fwrite($handle, "<?php\n #Config.php#\n\n //installation param\ndefine(\"install\", \"1\" );\n\n //errors param\ndefine(\"max_error_lvl_show\", 1);\n?>" ); //lors de la création du fichier
  2. fwrite($handle, "\n //".$comment."\n".$contents); //le $handle insère au bon endroit le texte
  3. fwrite($handle, "define(\"".$name."\", \"".$value."\" );\n".$contents); //le $handle insère au bon endroit le texte
  4. ...etc.
 

Je récupère donc quelque chose comme :

Code :
  1. <?php
  2. #Config.php#
  3.  
  4. //installation param
  5. define("install", "3" );
  6.  
  7. //errors param
  8. define("max_error_lvl_show", 1);
  9.  
  10. //language params
  11. define("lang_default", "fr" );
  12.  
  13. //test
  14. define("test", "test" );
  15. ?>
 

Maintenant, pour insérer au bon endroit d'autres textes, je dois placer mon curseur juste avant :

Code :
  1. //language params
 

J'utilise donc une regex :

Code :
  1. $comment = "language params";
  2. $pattern = '/\n \/\/'.$comment.'/';
 

Mais ça ne match pas, le plus étonnant c'est que :

Code :
  1. $pattern = '/. \/\/'.$comment.'/s';
 

Ne fonctionne pas non plus, bon j'ai essayé des dizaines de combinaisons, mais rien ne fonctionne. Au passage, les essais précédents fonctionnent sur le site regex101. Si je n'essaye pas d'attraper le saut de ligne, je choppe bien mon texte, donc c'est vraiment le saut de ligne qui chie.
Donc si quelqu'un a une idée, merci.


Message édité par MaybeEijOrNot le 22-04-2018 à 01:48:44

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 22-04-2018 à 01:42:48   

Reply

Marsh Posté le 22-04-2018 à 10:35:40    

Veuillez oublier ma débilité, la nuit porte conseil, le problème n'est pas dans le regex mais dans le fait que pour trouver la position je lis le fichier ligne par ligne :
 

Code :
  1. public function find_position($type, $name, $value = null) {
  2.      $handle = fopen($this->path, 'r');
  3.      if($handle) {
  4.         $this->position_copy = ftell($handle);
  5.         $this->position_paste = ftell($handle);
  6.         while(($line = fgets($handle, 4096)) !== false) {
  7.            if($this->file_parsing($line, $type, $name, $value)) {
  8.               $this->debug = ftell($handle)."\n";
  9.               $this->position_copy = ftell($handle);
  10.               break;
  11.            } else {
  12.               $this->position_paste = ftell($handle);
  13.            }
  14.         }
  15.         if(feof($handle)) {
  16.            fseek($handle, -2, SEEK_END);
  17.            $this->position_copy = ftell($handle);
  18.            $this->position_paste = ftell($handle);
  19.         }
  20.         fclose($handle);
  21.      } else {
  22.         throw new user_error(err_cannotreadfile.$this->path, 1);
  23.      }
  24.      return $this->debug;
  25.   }


 
 :(


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Sujets relatifs:

Leave a Replay

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