IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Conversion regex JavaScript en PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut Conversion regex JavaScript en PHP
    Bonjour,

    je cherche à retranscrire 3 Regex pompé sur un code Javascript pour les retranscrire en PHP mais j'ai quelques problèmes
    Voici le premier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /^\s|\s$|\/\*[^]*?\*\/|\s*;*([^\:\w.#\x27"\s*-])\s*|(:) /g
    Lui fait une erreur de ), c'est surtout lié à la syntaxe [^] que je ne comprend pas...

    et le second:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /(\/\*[^]*?\*\/|\/\/.*|\s)+/g
    Pareil, le [^] ?

    et le dernier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /^ *|; *(})|;? *?$| *(\W) */g
    qui est plus simple et ne dois pas demander de retranscription...

    Je vous remercie d'avance pour votre aide

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    [^] est une ancienne syntaxe Javascript qui est supportée par des anciennes versions d'internet explorer et qui est équivalente à [\s\S] (C'est en fait la négation de "rien" pour pouvoir matcher n'importe quel caractère.). Il est clair qu'il ne faut plus utiliser cette syntaxe qui n'est plus supportée nulle part (et encore moins en PHP).

    Au lieu de "pomper" puis d'essayer de retranscrire des expressions plus ou moins pourries. Tu devrais clairement définir tes besoins et écrire l'expression (ou le code) toi-même.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Je croyais ça que ça permettait d'exclure dans ce contexte les */ afin mais oui, pour le coup, maintenant que je réfléchi ça n'a pas de sens... Merci pour la précision (et je comprends pourquoi stackoverflow me déteste maintenant...)

    En réalité, mon besoin est assez bête, j'ai besoin d'un petit minificateur de CSS et JS.
    Pour le CSS, un simple qui permet de supprimer tout les espaces, saut de ligne et commentaires. (bon, oublions content qui peut contenir des strings ayant des espaces qu'on ne devrait pas toucher normalement...)

    Pour Javascript, je sais que c'est nettement plus complexe en raison des ; qui ne sont pas obligatoire, des contenus de string (comme content en css mais en Javascript c'est nettement plus courant) ou même de pattern regex que le code pourrai contenir.

    J'ai fais pas mal de recherche mais ça semblerai impossible à faire (en tout cas, pas compatible avec ma vision de "petit"...). En tout cas, tout ceux que j'ai testé à présent ne fonctionne pas...

    Auriez vous une idée?

    ref:
    http://snippetrepo.com/snippets/simp...ss-js-minifier
    https://github.com/chevereto/class.m...ass.minify.php
    http://xem.github.io/miniMinifier/css/
    http://www.minifier.org/

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Oui en effet, c'est loin d'être une tâche basique, et les minifier éprouvés feront ça mieux étant donné que les gens qui les ont conçus on déjà dû (je l'espère) se poser toutes les bonnes questions et repérer les pièges possibles. Il en existe une foultitude, tu devrais pouvoir trouver ton bonheur. Demande toi aussi comment utiliser ce minifier, est-ce une tâche qui doit-être effectuée à la volée ou une bonne fois pour toute?

    Sinon esquiver une chaîne de caractère ou une expression régulière est en fait plutôt simple. L'idée est toujours la même, on capture d'abord ce que l'on veut esquiver, puis ensuite on place ce que l'on souhaite enlever, le schéma est donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pattern: (à_garder1|à_garder2...)|à_enlever1|à_enlever2
    replacement: $1
    un exemple pour enlever les commentaires en javascript (je l'écris dans une chaîne nowdoc pour éviter de répéter 36 fois les antislashes, ou d'échapper les quotes):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $pattern = <<<'EOD'
    ~
    (?s)                            # on autorise le point à matcher les nouvelles lignes sur la première alternative (tout le groupe de capture)
    (                               # le groupe de capture (à garder)
        "(?:[^\\"]+|\\.)*+"         # les chaînes entre double quotes
      |
        '(?:[^\\']+|\\.)*+'         # les chaînes entre simple quotes
      |
        /[^*/\\](?:[^/\\]+|\\.)*+/  # les expressions régulières
    )
    |                               # à enlever
      /\*(?:[^*]+|\*+(?!/))*+\*/    # les commentaires multi-lignes
    |
      //.*                          # les commentaires de fin de ligne
    ~x
    EOD;
    Deux autres schémas sont aussi possibles:
    - l'utilisation du combo (*SKIP)(*FAIL) qui consiste à forcer la pattern à échouer et à ne pas réessayer (à sauter) les parties déjà testées (à gauche du combo):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pattern: (?:à_garder1|à_garder2|...)(*SKIP)(*FAIL)|à_enlever1|à_enlever2|...
    replacement: rien du tout
    - l'utilisation de \K qui lui ne fait pas échouer la pattern mais enlève du résultat tout ce qui est à sa gauche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pattern: (?:à_garder1|à_garder2|...)\K|à_enlever1|à_enlever2|...
    replacement: rien du tout
    (à noter que cette dernière technique ne peut pas être utilisée si on souhaite remplacer par autre chose qu'une chaîne vide.)

Discussions similaires

  1. Conversion fichier javascript en php
    Par sebastien.bordat dans le forum Apache
    Réponses: 3
    Dernier message: 21/12/2011, 22h26
  2. Conversion d'un code javascript en php
    Par jazz3210 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 07/02/2009, 20h48
  3. Conversion d"un code javascript en php
    Par jazz3210 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 07/02/2009, 20h05
  4. [PHP-JS] Conversion fonction de temps PHP vers javascript
    Par Flynt dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/04/2008, 17h46
  5. Réponses: 1
    Dernier message: 15/05/2006, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo