Expression regulière
Stef
-
Stef -
Stef -
Bonjour,
Je n'arrive pas a construire une xepression regulire qui me rend pour un style donné et un type donné sa valeur.
Exemple pour la feuille suivante j'aimerais obtenir #A3C1E0
pour le style .stylebleu et le type background-color avec une expression reguliere.
Merci de vos réponses
.stylebleu {
background-color: #A3C1E0;
}
.styleMenu {
color: #FFFFFF;
background-color: #3A76B1;
background-position: center center;
text-align: center;
vertical-align: middle;
text-transform: none;
}
Je n'arrive pas a construire une xepression regulire qui me rend pour un style donné et un type donné sa valeur.
Exemple pour la feuille suivante j'aimerais obtenir #A3C1E0
pour le style .stylebleu et le type background-color avec une expression reguliere.
Merci de vos réponses
.stylebleu {
background-color: #A3C1E0;
}
.styleMenu {
color: #FFFFFF;
background-color: #3A76B1;
background-position: center center;
text-align: center;
vertical-align: middle;
text-transform: none;
}
A voir également:
- Expression regulière
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Expression de recherche - Guide
- Avoir du ping expression ✓ - Forum jeux en ligne
- T'as du ping expression - Forum Réseau
11 réponses
En Python, et hop...
css = """
.stylebleu {
background-color: #A3C1E0;
}
.styleMenu {
color: #FFFFFF;
background-color: #3A76B1;
background-position: center center;
text-align: center;
vertical-align: middle;
text-transform: none;
}
"""
import re
regexp = re.compile("\.stylebleu\s*?{.*?background-color:(.+?);.*?}",re.DOTALL|re.IGNORECASE)
print regexp.search(css).group(1)
Salut,
et son cousin en Perl
sebsauvage a utilisé une variable; moi j'ai écrit le contenu dans un fichier .css que je l'écrit en argument .
Execution : script fichier.css
modificateur i pour insensibilté à la casse
modificateur s pour mode une seule ligne (le . reconnaît aussi le \n )
lami20j
et son cousin en Perl
sebsauvage a utilisé une variable; moi j'ai écrit le contenu dans un fichier .css que je l'écrit en argument .
Execution : script fichier.css
#! /usr/bin/perl
use warnings;
local $/; # mode slurp (le fichier est avalé dans une variable scalaire)
$t=<>; # on utilise le fichier .css en tant qu'argument
print $1,"\n" if $t=~/.stylebleu\s*{.*?background-color:\s*(.*?);.*?}/si;
modificateur i pour insensibilté à la casse
modificateur s pour mode une seule ligne (le . reconnaît aussi le \n )
lami20j
Sous php, pour utiliser ces expressions régulières tu ne peux pas prendre ereg, il faut prendre preg_match ou preg_match_all
? signifie une fois ou pas.
donc .*? signifie
"tout caractère, autant de fois qu'on veux mais une seule fois".
Bizzare hein? Et bien c'est logique en fait, si tu appliques:
.*m
pour la chaine " / - g f m p" il ne s'arrêtera pas à m mais il ira jusqu'au bout, puisqu'on lui a dit tout caractère autant de fois qu'on veut juste avant.
Si tu mets:
.*?m
pour la même chaine, il prendra " / - g f m" car il arrêtera son expression .* dés qu'il trouvera un m.
? signifie une fois ou pas.
donc .*? signifie
"tout caractère, autant de fois qu'on veux mais une seule fois".
Bizzare hein? Et bien c'est logique en fait, si tu appliques:
.*m
pour la chaine " / - g f m p" il ne s'arrêtera pas à m mais il ira jusqu'au bout, puisqu'on lui a dit tout caractère autant de fois qu'on veut juste avant.
Si tu mets:
.*?m
pour la même chaine, il prendra " / - g f m" car il arrêtera son expression .* dés qu'il trouvera un m.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
? c'est un quantificateur qui veut dire facultativ
ab?c reconnaît ac mais aussi abc
Dans la construction .*? a une autre signification. Il s'agit des quantificateur * paresseux.
Exemple
"popup =~ /p(.*)p/ # on capture opu
et
"popup =~ /p(.*?)p/ # on capture o
Je ne connaît pas php. Pour m'amuser j'ai fait un script qui fait une recherche progressive dans menu.css et trouve toutes les correspondances.
Je ne sais pas si en php ou python il y a l'assertion \G
? c'est un quantificateur qui veut dire facultativ
ab?c reconnaît ac mais aussi abc
Dans la construction .*? a une autre signification. Il s'agit des quantificateur * paresseux.
Exemple
"popup =~ /p(.*)p/ # on capture opu
et
"popup =~ /p(.*?)p/ # on capture o
Je ne connaît pas php. Pour m'amuser j'ai fait un script qui fait une recherche progressive dans menu.css et trouve toutes les correspondances.
Je ne sais pas si en php ou python il y a l'assertion \G
#! /usr/bin/perl
use warnings;
my %h;
local $/; # mode slurp
$t=<>; # on utilise le fichier .css en tant qu'argument
while ($t =~ /.style(\w+?)\s*{.*?background-color:\s*/sig){
my $c = $1;
$t =~ /\G(#\w+)/ and $h{$c} = $1;
}
foreach (sort keys %h) {
print "style$_ : $h{$_}\n";
}
Le fichier menu.css[lamitest@localhost my_perl_script]$ cat menu.css
.stylebleu {
background-color: #A3C1E0;
}
.styleMenu {
color: #FFFFFF;
background-color: #3A76B1;
background-position: center center;
text-align: center;
vertical-align: middle;
text-transform: none;
}
.stylePerso {
background-color: #AFC1B0;
}
.styleNewMenu {
color: #FFFFFF;
background-color: #AA76BA;
background-position: center center;
text-align: center;
vertical-align: middle;
text-transform: none;
}
[lamitest@localhost my_perl_script]$
Le résultat[lamitest@localhost my_perl_script]$ perl regex_stef_ccmG.pl menu.css styleMenu : #3A76B1 styleNewMenu : #AA76BA stylePerso : #AFC1B0 stylebleu : #A3C1E0 [lamitest@localhost my_perl_script]$lami20j
Salut kilian,
comme j'étais en train de t'adresser un petit message pendant que tu as déjà écrit un....
En Perl .*? veut dire de prendre n'importe quel caractère mais de se contenter avec le minimal qui le satisfait
Voilà 3 cas :
Bien sûr ça depende aussi du moteur utilisé par le regex.
a+,
lami20j
comme j'étais en train de t'adresser un petit message pendant que tu as déjà écrit un....
En Perl .*? veut dire de prendre n'importe quel caractère mais de se contenter avec le minimal qui le satisfait
Voilà 3 cas :
"exigence" =~ /e(.*)e/ ; capture de xigenc "exigence" =~ /e(.*?)e/; capture de xig "exigence" =~ /.*e(.*?)e/; capture de ncPour ton cas *.m, c'est vrai que la regex avale tout mais ensuite elle est obligé de s'incliner quant'à la reconnaissance de m donc elle va céder un caractère pour que l'expression réussie en totalité.
Bien sûr ça depende aussi du moteur utilisé par le regex.
a+,
lami20j
"pour la chaine " / - g f m p" il ne s'arrêtera pas à m "
C'est donc pour cela qui'il me prenait la derniere occurence de background-color: avec mon expression reguliere !
Merci encore, je vais essayer avec preg_match .
C'est donc pour cela qui'il me prenait la derniere occurence de background-color: avec mon expression reguliere !
Merci encore, je vais essayer avec preg_match .