Expression régulière
Fermé
Cisco_31
Messages postés
131
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
28 juin 2013
-
25 janv. 2010 à 17:52
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 25 janv. 2010 à 23:22
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 25 janv. 2010 à 23:22
A voir également:
- Expression régulière
- Expression de recherche - Guide
- Expression encoder - Télécharger - Divers Utilitaires
- Error: expected expression ✓ - Forum C
- Quel fichier contient l’expression trouverpix ? - Forum Programmation
- Mettre en image expression ✓ - Forum Jeux vidéo
9 réponses
blux
Messages postés
26539
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
20 décembre 2024
3 317
25 janv. 2010 à 18:06
25 janv. 2010 à 18:06
Salut,
c'est en quel langage ?
c'est en quel langage ?
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
25 janv. 2010 à 18:22
25 janv. 2010 à 18:22
Bonsoir,
“qui interdit des extensions de fichier“ .....
quid ?
Tu veux rechercher des noms de fichiers dans un texte, mais seulement ceux qui n’ont pas d’extension ?
Tu veux trouver les noms de fichiers sans n’importe quelle extension
ou sans certaines extensions spécifiées comme il s’en trouve dans la chaîne que tu donnes ?
À mon avis, il ne suffit pas de mettre .+\. devant l’indication qui excluera les extensions.
.+\. c’est trop vague comme caractérisation. Il est susceptible d’y avoir des mots jpeg,jpg,rtf etc dans un texte sans que ce soient des extensions dans un nom de fichier.
Il serait bon d’arriver à caractériser un peu mieux ce qui est susceptible d’être nom de fichier et ce qui ne l’est pas, dans un texte.
“qui interdit des extensions de fichier“ .....
quid ?
Tu veux rechercher des noms de fichiers dans un texte, mais seulement ceux qui n’ont pas d’extension ?
Tu veux trouver les noms de fichiers sans n’importe quelle extension
ou sans certaines extensions spécifiées comme il s’en trouve dans la chaîne que tu donnes ?
À mon avis, il ne suffit pas de mettre .+\. devant l’indication qui excluera les extensions.
.+\. c’est trop vague comme caractérisation. Il est susceptible d’y avoir des mots jpeg,jpg,rtf etc dans un texte sans que ce soient des extensions dans un nom de fichier.
Il serait bon d’arriver à caractériser un peu mieux ce qui est susceptible d’être nom de fichier et ce qui ne l’est pas, dans un texte.
Cisco_31
Messages postés
131
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
28 juin 2013
16
25 janv. 2010 à 18:49
25 janv. 2010 à 18:49
Merci de m'avoir répondu.
@blux: "c'est en quel langage ? "
Ben, c'est des expressions régulière.
@heyquem
Je n'ai pas compris ce que tu dis.
Je vais reformuler ce que je souhaite faire:
L'utilisateur clique sur un bouton parcourir et selectionne un fichier. Puis il clique sur le bouton upload (un peu comme sur le site https://www.virustotal.com/gui/
Je souhaiterai contrôler l'extension du fichier via une expression régulière. Je voudrais bloquer certaine extension (exemple: .exe, .dll)
Voilà, j'espère avoir était plus clair.
Avez vous une idée? Merci
@blux: "c'est en quel langage ? "
Ben, c'est des expressions régulière.
@heyquem
Je n'ai pas compris ce que tu dis.
Je vais reformuler ce que je souhaite faire:
L'utilisateur clique sur un bouton parcourir et selectionne un fichier. Puis il clique sur le bouton upload (un peu comme sur le site https://www.virustotal.com/gui/
Je souhaiterai contrôler l'extension du fichier via une expression régulière. Je voudrais bloquer certaine extension (exemple: .exe, .dll)
Voilà, j'espère avoir était plus clair.
Avez vous une idée? Merci
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
25 janv. 2010 à 19:25
25 janv. 2010 à 19:25
Salut,
Le langage est très important pour pouvoir implémenté la regex
Sinon, pour regex ça peut être ça - avec les test avant positif et négatif
Mais ça peut être aussi ça avec la même regex mais en utilisant if et unless
Le langage est très important pour pouvoir implémenté la regex
Sinon, pour regex ça peut être ça - avec les test avant positif et négatif
$ ls -1 fic1.bmp fic1.gif fic1.jpeg fic1.jpg fic1.pl fic1.txt fic2.bmp fic2.gif fic2.jpeg fic2.jpg fic2.pl fic2.txt $ ls -1 | perl -ne 'print if /^.+\.(?=(?:jpg|gif|jpeg))/' fic1.gif fic1.jpeg fic1.jpg fic2.gif fic2.jpeg fic2.jpg $ ls -1 | perl -ne 'print if /^.+\.(?!(?:jpg|gif|jpeg))/' fic1.bmp fic1.pl fic1.txt fic2.bmp fic2.pl fic2.txt
Mais ça peut être aussi ça avec la même regex mais en utilisant if et unless
n$ ls -1 fic1.bmp fic1.gif fic1.jpeg fic1.jpg fic1.pl fic1.txt fic2.bmp fic2.gif fic2.jpeg fic2.jpg fic2.pl fic2.txt $ ls -1 | perl -ne 'print if /^.+\.(?=(?:jpg|gif|jpeg))/' fic1.gif fic1.jpeg fic1.jpg fic2.gif fic2.jpeg fic2.jpg $ ls -1 | perl -ne 'print unless /^.+\.(?=(?:jpg|gif|jpeg))/' fic1.bmp fic1.pl fic1.txt fic2.bmp fic2.pl fic2.txt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
25 janv. 2010 à 19:36
25 janv. 2010 à 19:36
Re,
Avec egrep
Avec egrep
$ ls -1 fic1.bmp fic1.gif fic1.jpeg fic1.jpg fic1.pl fic1.txt fic2.bmp fic2.gif fic2.jpeg fic2.jpg fic2.pl fic2.txt $ ls -1 | egrep '^.+\.(jpg|gif|jpeg)' fic1.gif fic1.jpeg fic1.jpg fic2.gif fic2.jpeg fic2.jpg $ ls -1 | egrep -v '^.+\.(jpg|gif|jpeg)' fic1.bmp fic1.pl fic1.txt fic2.bmp fic2.pl fic2.txt
Cisco_31
Messages postés
131
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
28 juin 2013
16
25 janv. 2010 à 20:26
25 janv. 2010 à 20:26
Bon, je crois que je vais abandonner les expressions régulières. Je ferai autrement
Merci quand même!
Merci quand même!
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
25 janv. 2010 à 21:12
25 janv. 2010 à 21:12
Euh.....lami20j, ce sont des expressions régulières exprimées en ligne de commande ?
Tout ça n’est pas très clair.
Tu pourrais signaler
- que tu répètes
$ ls -1 | perl -ne 'print if /^.+\.(?=(?:jpg|gif|jpeg))/'
- que
$ ls -1 | perl -ne 'print if /^.+\.(?=(?:jpg|gif|jpeg))/'
et
$ ls -1 | egrep '^.+\.(jpg|gif|jpeg)'
sont équivalentes
- que
$ ls -1 | perl -ne 'print if /^.+\.(?!(?:jpg|gif|jpeg))/'
et
$ ls -1 | perl -ne 'print unless /^.+\.(?=(?:jpg|gif|jpeg))/'
et
$ ls -1 | egrep -v '^.+\.(jpg|gif|jpeg)'
sont équivalentes
Pour ma part, je ne pense pas que le langage soit TRÈS important pour écrire des regex. Le cœur des regex est le même d’un langage à un autre. Il y a des petites variations selon le langage, certains ne comportent pas la totalité des possibilités d’un moteur de regex; Perl étant, je crois, le langage dans lequel les regex sont les plus puissantes.
D’un langage à l’autre, il y a la façon d’écrire ce qu’il y a autour d’une RE qui varie , mais la façon d’écrire une RE est assez indépendante du langage. Enfin, je crois.
Enfin, tout ça ne répond pas au problème de Cisco_31.
Malgré tes explications supplémentaires, Cisco, je ne comprends pas encoe ce que tu veux.
« contrôler l'extension du fichier » sélectionné
«bloquer certaine extension»
qu’est ce que ça veut dire ?
Il s’agit de noms de fichiers dans un menu déroulant ? Et non pas dans un texte ?
Pourquoi ne pas controler la présence des fichiers dans le menu déroulant au lieu de vouloir les controler quand un utilisateur fait un choix ?
Tout ça n’est pas très clair.
Tu pourrais signaler
- que tu répètes
$ ls -1 | perl -ne 'print if /^.+\.(?=(?:jpg|gif|jpeg))/'
- que
$ ls -1 | perl -ne 'print if /^.+\.(?=(?:jpg|gif|jpeg))/'
et
$ ls -1 | egrep '^.+\.(jpg|gif|jpeg)'
sont équivalentes
- que
$ ls -1 | perl -ne 'print if /^.+\.(?!(?:jpg|gif|jpeg))/'
et
$ ls -1 | perl -ne 'print unless /^.+\.(?=(?:jpg|gif|jpeg))/'
et
$ ls -1 | egrep -v '^.+\.(jpg|gif|jpeg)'
sont équivalentes
Pour ma part, je ne pense pas que le langage soit TRÈS important pour écrire des regex. Le cœur des regex est le même d’un langage à un autre. Il y a des petites variations selon le langage, certains ne comportent pas la totalité des possibilités d’un moteur de regex; Perl étant, je crois, le langage dans lequel les regex sont les plus puissantes.
D’un langage à l’autre, il y a la façon d’écrire ce qu’il y a autour d’une RE qui varie , mais la façon d’écrire une RE est assez indépendante du langage. Enfin, je crois.
Enfin, tout ça ne répond pas au problème de Cisco_31.
Malgré tes explications supplémentaires, Cisco, je ne comprends pas encoe ce que tu veux.
« contrôler l'extension du fichier » sélectionné
«bloquer certaine extension»
qu’est ce que ça veut dire ?
Il s’agit de noms de fichiers dans un menu déroulant ? Et non pas dans un texte ?
Pourquoi ne pas controler la présence des fichiers dans le menu déroulant au lieu de vouloir les controler quand un utilisateur fait un choix ?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
25 janv. 2010 à 21:29
25 janv. 2010 à 21:29
Salut,
Tout ça n’est pas très clair.
Tu pourrais signaler
...
sont équivalentes
C'est déjà fait ;-)
Mais ça peut être aussi ça avec la même regex mais en utilisant if et unless
Et d'ailleurs ça se voit, pourquoi j'aurais eu besoin de le dire? ;-))
mais la façon d’écrire une RE est assez indépendante du langage. Enfin, je crois.
Je suis d'accord sur ce point.
Toutefois on a besoin de langage pour l'implémenter par pour l'écrire, si tu vois ce que je veux dire.
On peut penser en faisant des test avant ou arrière, mais ça ne sers à rien si l'application/langage qui utilise la regex n'accepte pas les tests avant/arrière par exemple.
Dans son cas, je ne pense pas que c'est si compliqué.
En actionnant le bouton upload il peut écrire un petit script qui vérifie si le fichier a une certain extension ou pas.
Dans son cas la regex et bonne.
Il suffit de l'intégrer correctement et pour ça il faut savoir le langage, non?
P.S. Si le langage n'était pas important tu n'aurais pas dit ça ;-) (on parle toujours de l'implémentation)
Tu sauras alors si les look ahead et behind assertions sont supportées par JavaScript
Tout ça n’est pas très clair.
Tu pourrais signaler
...
sont équivalentes
C'est déjà fait ;-)
Mais ça peut être aussi ça avec la même regex mais en utilisant if et unless
Et d'ailleurs ça se voit, pourquoi j'aurais eu besoin de le dire? ;-))
mais la façon d’écrire une RE est assez indépendante du langage. Enfin, je crois.
Je suis d'accord sur ce point.
Toutefois on a besoin de langage pour l'implémenter par pour l'écrire, si tu vois ce que je veux dire.
On peut penser en faisant des test avant ou arrière, mais ça ne sers à rien si l'application/langage qui utilise la regex n'accepte pas les tests avant/arrière par exemple.
Dans son cas, je ne pense pas que c'est si compliqué.
En actionnant le bouton upload il peut écrire un petit script qui vérifie si le fichier a une certain extension ou pas.
Dans son cas la regex et bonne.
Il suffit de l'intégrer correctement et pour ça il faut savoir le langage, non?
if( regex (dll,exe)) pas upload else upload
P.S. Si le langage n'était pas important tu n'aurais pas dit ça ;-) (on parle toujours de l'implémentation)
Tu sauras alors si les look ahead et behind assertions sont supportées par JavaScript
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
25 janv. 2010 à 22:39
25 janv. 2010 à 22:39
Je n’ai pas dit que le langage ne compte pas du tout. Je dis que les variations d’écriture dépendantes du langage sont un épiphénomène par rapport au problème central de savoir comment écrire une RE.
Quand j’écris RE, je désigne une chaîne de caractères.
Ensuite, la façon dont une RE est utilisée par un programme écrit dans un langage donné pour en tirer un objet regex, c’est une autre histoire.
Concernant
«Tu sauras alors si les look ahead et behind assertions sont supportées par JavaScript»
tu as un peu raison: si les assertions avant-arrière sont disponibles ou non selon le langage, c’est bien le langage qui fait la différence.
Mais si le langage détermine la disponibilité, il ne détermine pas l’écriture. D’un langage à un autre ces assertions, quand elles sont disponibles, s’écrivent de la même façon. C’est ça que j’ai voulu dire. Je ne parlais pas d’implémentation.
Alors je vois en relisant ton post que tu as écrit
«Le langage est très important pour pouvoir implémenté la regex»
Pour ma part, j’évite le plus possible d’employer les termes d’implémenter et implémentation parce que j’ai la forte impression que ces termes sont dans la plupart des cas employés sans que ceux qui les utilisent sachent vraiment ce qu’ils veulent dire exactement. Je me demande d’ailleurs s’il existe réellement une définition canonique, autorisée, pensée, correcte, etc et tout ce qu’on voudra, ou si ce sont des termes fumeux qui sont employés parce que ça fait bien et que ça donne une tournure informatique au propos même si on ne sait pas exactement ce qu’on veut dire avec ces termes. Je ne crois pas que ce soit le cas: il doit y avoir des profs et des calés en informatique qui savent exactement ce que ces termes recouvrent. Mais dans la masse des informaticiens moyens (dont je fais partie), je suis convaincu qu'il y en a beaucoup qui emploient ces termes au pifomètre et qui seraient infoutus d'expliquer ce qu'ils désignent
Je ne dis pas que c’est ton cas. Tu sembles au contraire employer ces termes en connaissance de cause:
«on a besoin de langage pour l'implémenter par pour l'écrire, si tu vois ce que je veux dire. »
J’avoue que quand j’ai lu ton premier message, j’ai toutefois pensé plus ou moins consciemment que tu écrivais
«Le langage est très important pour pouvoir implémenté la regex »
comme tu aurais écrit
«Le langage est très important pour pouvoir écrire la regex »
J’avoue ma faute de paresse intellectuelle.
Il n’en reste pas moins que je ne suis pas encore tout à fait d’accord:
un moteur de regex est déjà implémenté dans un langage, on n’a pas la possibilité d’implémenter une regex, et non je ne vois donc pas ce que tu veux dire.
Une regex (un objet regex) est créée par le fonctionnement du programme écrit dans un langage dont les possibilités sont pré-implémentées, on n’intervient pas à ce niveau mais seulement au niveau d’un agencement des instructions et de l’écriture de la RE.
Quand j’écris RE, je désigne une chaîne de caractères.
Ensuite, la façon dont une RE est utilisée par un programme écrit dans un langage donné pour en tirer un objet regex, c’est une autre histoire.
Concernant
«Tu sauras alors si les look ahead et behind assertions sont supportées par JavaScript»
tu as un peu raison: si les assertions avant-arrière sont disponibles ou non selon le langage, c’est bien le langage qui fait la différence.
Mais si le langage détermine la disponibilité, il ne détermine pas l’écriture. D’un langage à un autre ces assertions, quand elles sont disponibles, s’écrivent de la même façon. C’est ça que j’ai voulu dire. Je ne parlais pas d’implémentation.
Alors je vois en relisant ton post que tu as écrit
«Le langage est très important pour pouvoir implémenté la regex»
Pour ma part, j’évite le plus possible d’employer les termes d’implémenter et implémentation parce que j’ai la forte impression que ces termes sont dans la plupart des cas employés sans que ceux qui les utilisent sachent vraiment ce qu’ils veulent dire exactement. Je me demande d’ailleurs s’il existe réellement une définition canonique, autorisée, pensée, correcte, etc et tout ce qu’on voudra, ou si ce sont des termes fumeux qui sont employés parce que ça fait bien et que ça donne une tournure informatique au propos même si on ne sait pas exactement ce qu’on veut dire avec ces termes. Je ne crois pas que ce soit le cas: il doit y avoir des profs et des calés en informatique qui savent exactement ce que ces termes recouvrent. Mais dans la masse des informaticiens moyens (dont je fais partie), je suis convaincu qu'il y en a beaucoup qui emploient ces termes au pifomètre et qui seraient infoutus d'expliquer ce qu'ils désignent
Je ne dis pas que c’est ton cas. Tu sembles au contraire employer ces termes en connaissance de cause:
«on a besoin de langage pour l'implémenter par pour l'écrire, si tu vois ce que je veux dire. »
J’avoue que quand j’ai lu ton premier message, j’ai toutefois pensé plus ou moins consciemment que tu écrivais
«Le langage est très important pour pouvoir implémenté la regex »
comme tu aurais écrit
«Le langage est très important pour pouvoir écrire la regex »
J’avoue ma faute de paresse intellectuelle.
Il n’en reste pas moins que je ne suis pas encore tout à fait d’accord:
un moteur de regex est déjà implémenté dans un langage, on n’a pas la possibilité d’implémenter une regex, et non je ne vois donc pas ce que tu veux dire.
Une regex (un objet regex) est créée par le fonctionnement du programme écrit dans un langage dont les possibilités sont pré-implémentées, on n’intervient pas à ce niveau mais seulement au niveau d’un agencement des instructions et de l’écriture de la RE.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
25 janv. 2010 à 23:22
25 janv. 2010 à 23:22
Re,
Une regex (un objet regex) est créée par le fonctionnement du programme écrit dans un langage dont les possibilités sont pré-implémentées, on n’intervient pas à ce niveau mais seulement au niveau d’un agencement des instructions et de l’écriture de la RE.
Dans ce cas ce n'est pas pareil.
Par exemple en Perl, regex et objet regex sont deux choses différentes.
D'une côté un a la regex et de l'autre on a l'opérateur qr// qui permet de créer un objet regex.
L'objet regex peut servir :
- pour l'encapsulation de regex pour les utiliser dans des regex plus grandes
- pour l'efficacité, contrôler quand une regex est compilée
En ce qui concerne le niveau d'intervention je suis d'accord avec toi.
Tout ce que nous les utilisateurs on peut faire c'est d'écrire une regex ou créer un objet regex et si besoin de comprendre le fonctionnement du moteur pour l'efficacité des regex.
En réalité je pense qu'on est plutôt d'accord, mais peut être que j'ai du mal m'exprimer ;-)
Une regex (un objet regex) est créée par le fonctionnement du programme écrit dans un langage dont les possibilités sont pré-implémentées, on n’intervient pas à ce niveau mais seulement au niveau d’un agencement des instructions et de l’écriture de la RE.
Dans ce cas ce n'est pas pareil.
Par exemple en Perl, regex et objet regex sont deux choses différentes.
D'une côté un a la regex et de l'autre on a l'opérateur qr// qui permet de créer un objet regex.
L'objet regex peut servir :
- pour l'encapsulation de regex pour les utiliser dans des regex plus grandes
- pour l'efficacité, contrôler quand une regex est compilée
En ce qui concerne le niveau d'intervention je suis d'accord avec toi.
Tout ce que nous les utilisateurs on peut faire c'est d'écrire une regex ou créer un objet regex et si besoin de comprendre le fonctionnement du moteur pour l'efficacité des regex.
En réalité je pense qu'on est plutôt d'accord, mais peut être que j'ai du mal m'exprimer ;-)