Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
450 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] pourquoi ma regex ne marche pas ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] pourquoi ma regex ne marche pas ?

n°2296377
Jean Bette​rave
Do the ultra twist
Posté le 13-02-2017 à 19:12:29  profilanswer
 

Bonjour  :bounce:  
 
J'ai un texte :
 

Citation :

"\nDeutsche Internationale Schule in Abu Dhabi\nP.O. Box 4150\nAbu Dhabi\nTelefon:\t00971-2-6668668\nTelefax:\t+ 971-2-6653107\nE-Mail-Schule:\tinfo@gisad.ae\nE-Mail VwLtr:\tdoris.boehm@gisad.ae\nE-Mail Vorstand:vv@gisad.ae\n\nInternet:\twww.gisad.ae\n\nZeitdifferenz (in Std.):\nSommerzeit:\t+2\nWinterzeit:\t+3\n\n2. Zuständige Auslandsvertretung:\nEmbassy of the Federal Republic of Germany\nP.O.Box 2591\n\n\n\nAbu Dhabi\n\n\n\nVereinigte


 
Je veux le matcher et sélectionner "Deutsche Internationale Schule in Abu Dhabi", entre les deux premiers retours chariots ("\r" ).
 
voilà ma redex :

Code :
  1. ^[^\n]*\n([^\n]+).*


 
pourquoi ça ne marche pas ? regex101.com me dit que c'est parce que "[^\n]*" matche déjà tout mon texte... Je ne comprends pas parce qu'il devrait s'arrêter au premier "\n"  :??:  
 
 
Merci !

mood
Publicité
Posté le 13-02-2017 à 19:12:29  profilanswer
 

n°2296381
rat de com​bat
attention rongeur méchant!
Posté le 13-02-2017 à 21:16:39  profilanswer
 

Il a pourtant l'air de marcher ton truc... https://regex101.com/r/vzVKJg/1 Il faut bien sur penser à remplacer les \n par des vrais sauts de ligne.
 
Le .* m'a l'air d'être inutile (sauf contraintes particulières au PHP que je ne connais pas).

n°2296386
TotalRecal​l
Posté le 13-02-2017 à 22:33:23  profilanswer
 

Tu es sûr du format de tes retours lignes ? Et ce sont VRAIMENT des retours lignes et pas des caractères échappés comme dans ton exemple ?
Un truc plus cross platform pour les retours c'est : \r\n?|\n


Message édité par TotalRecall le 13-02-2017 à 22:33:56

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2296392
H3bus
Troll Inside
Posté le 14-02-2017 à 08:38:06  profilanswer
 

Comme le dit TotalRecall, si tu veux matcher ton texte avant que les caractère ne soient échapés (donc en brut comme tu l'as mis dans ton post), ton '\n' sera matché par '\\n'. Attention, il s'agit de deux caractère donc ça ne marchera pas si tu le met entre []


---------------
sheep++
n°2296397
rat de com​bat
attention rongeur méchant!
Posté le 14-02-2017 à 11:03:06  profilanswer
 

Très bonnes :o remarques de TotalRecall et h3bus. :jap:  
 
Si c'est le cas je propose ^.*?\\n(.*?)\\n
 
https://regex101.com/r/667OFv/1
 
Le truc utile et utilisé ici c'est le "lazy quantifier" (que je connais sous le nom "non-greedy" ): *? Matches as few characters as possible.


Message édité par rat de combat le 14-02-2017 à 11:37:55
n°2296505
Jean Bette​rave
Do the ultra twist
Posté le 15-02-2017 à 18:46:15  profilanswer
 

Merci beaucoup pour les réponses !
 
D'abord je précise que j'ai mis "php" parce que c'est un langage répandu et que ça revient au même pour mon problème mais qu'en fait j'utilise R...
 
Vous avez raison ce ne sont pas des retours chariots dans mon texte mais juste un "\" et un "n" qui se suivent. (J'ai fait pas mal de manip pour avoir un objet manipulable dans R : pdf→txt→list→vecteur... comme je débute je tâtonne pas mal, et je me perds parfois)
 
Je ne connaissais pas le "lazy quantifier", il a l'air utile... ta proposition me semble très bien, ça marche sur le testeur, mais pour une raison que j'ignore sous R la parenthèse prend le tout texte sauf les deux premiers "\n", ceux qui encadrent ce que je veux  :fou:  
 
J'ai aussi essayé ^[^\\]*\\n([^\\]+).*, qui marche sur regex101 mais pas avec R, qui me renvoie une erreur  :fou:

Citation :

 Erreur de compilation du motif PCRE
 'missing terminating ] for character class'
 at ''


 
Bon, d'abord il y a un problème spécifique à R : l'antislashs. R interprête \\ comme \... et \\\\ comme \\. Donc j'essaye en remplaçant les \\ par des \\\\, y'a du mieux mais c'est pas encore ça...


Message édité par Jean Betterave le 15-02-2017 à 22:01:09

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] pourquoi ma regex ne marche pas ?

 

Sujets relatifs
[PHP] Lire la page HTML d'un site sur lequel on est connectéPHP - Apache, best practices pour serveur multi sites
Pb lecture mail envoyé via PHPComment réaliser un historique d'achat ? (PHP, MySQL)
formulaire sans réel problème mais qui ne marche pas !?[Regex] prenant en compte le caractère "à"
Aide Php + Python (débutant)Code compteur de présence en PHP
PHP Imagecreatetruecolor : Allowed memory size....PHP Session <==> Coockie
Plus de sujets relatifs à : [PHP] pourquoi ma regex ne marche pas ?



Copyright © 1997-2016 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR