|
|
|
|
Bonjour,
Je suis sur un ptit script qui va utiliser des expressions régulières, et j'aurais souhaité avoir une info que je n'ai pas trouvé.
En fait, je veux faire un preg_match sur plusieurs expressions régulières, du style:
preg_match(regexp1 OU regex2 OU regexp3, "un texte à analyser")
avec regexpX étant les différentes expressions que je veux tester.
Mon soucis est donc le suivant:
Est-il possible d'inclure les "conditions" OU dans mon preg_match, ou bien suis-je obligé de multiplier cette ligne autant de fois que j'ai de regexp (dans mon exemple, ca ferait donc 3 fois)?
Et si oui, quel est le symbole de OU? (je parle pas du OU qu'on met dans une classe de caractère hein, mais bien un OU qu'on placerait dans le preg_match.
En espérant bien m'etre fait comprendre, je vous souhaite une bonne journée.
Merci d'avance.
Muad'Dib
Configuration: Windows XP Firefox 3.0.3
Hum, jcommence à me casser un peu les dents lol...
function AnalyseEtTraite ()
{
$repname=$1
if [preg_match ("#^\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\(CHANTIER|CLIENT|CONTRAT|PREVENTION|PRIME|SINISTRE)\\$|^\\[a-zA-Z0-9_ ()-]+\\CHANTIER\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\CHANTIER\\[a-zA-Z0-9_ ()-]+\\DOSSIER\\$|^\\[a-zA-Z0-9_ ()-]+\\CONTRAT\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\CONTRAT\\[a-zA-Z0-9_ ()-]+\\DOSSIER\\$|^\\[a-zA-Z0-9_ ()-]+\\PREVENTION\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\PRIME\\CIES\\$|^\\[a-zA-Z0-9_ ()-]+\\SINISTRE\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\SINISTRE\\[a-zA-Z0-9_ ()-]+\\(ASSURANCE|DOSSIER|EXPERTISE)\\$#",$repname)] ; then
echo $1
fi
};
find . -type d -exec AnalyseEtTraite {} \;
Si je simplifie le gros paté, ca équivault à ca: function AnalyseEtTraite ()
{
$repname=$1
if [preg_match ("#regexp1|regexp2|regexp3#",$repname)] ; then
echo $1
fi
};
find . -type d -exec AnalyseEtTraite {} \;
Et quand j'exécute le script, il me donne le message suivant: line 4: syntax error near unexpected token `"#^\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\(CHANTIER|CLIENT|CONTRAT|PREVENTION|PRIME|SINISTRE)\\$|^\\[a-zA-Z0-9_ ()-]+\\CHANTIER\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\CHANTIER\\[a-zA-Z0-9_ ()-]+\\DOSSIER\\$|^\\[a-zA-Z0-9_ ()-]+\\CONTRAT\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\CONTRAT\\[a-zA-Z0-9_ ()-]+\\DOSSIER\\$|^\\[a-zA-Z0-9_ ()-]+\\PREVENTION\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\PRIME\\CIES\\$|^\\[a-zA-Z0-9_ ()-]+\\SINISTRE\\[a-zA-Z0-9_ ()-]+\\$|^\\[a-zA-Z0-9_ ()-]+\\SINISTRE\\[a-zA-Z0-9_ ()-]+\\(ASSURANCE|DOSSIER|EXPERTISE)\\$#",$repname' Pour finir, je tenais juste à préciser que j'écris ce script dans un terminal, sur Debian. Voilà, donc je reste preneur de toute info utile (ou pas :p ). |
Oki, j'ai donc modifié cela... mais c'est sure que les regexp prennent pas mal de place ><
./DroitsCour: line 4: syntax error near unexpected token `newline'
./DroitsCour: line 4: `if [preg_match ('
avec DroitCour étant le nom du script NB: le message d'erreur s'arrete bien au dernier " ' "... le terminal n'a pas mis tout le paté de regexp C'est là où je me demande si preg_match est bien "installé" sur ma debian |
Juste au cas où ca paraisse plus clair, j'ai refait la mise en forme du script:
function AnalyseEtTraite ()
{
$repname=$1
if [preg_match (
"#
(^\\[a-zA-Z0-9_ ()-]+\\$)|
(^\\[a-zA-Z0-9_ ()-]+\\(CHANTIER|CLIENT|CONTRAT|PREVENTION|PRIME|SINISTRE)\\$)|
(^\\[a-zA-Z0-9_ ()-]+\\CHANTIER\\[a-zA-Z0-9_ ()-]+\\$)|
(^\\[a-zA-Z0-9_ ()-]+\\CHANTIER\\[a-zA-Z0-9_ ()-]+\\DOSSIER\\$)|
(^\\[a-zA-Z0-9_ ()-]+\\CONTRAT\\[a-zA-Z0-9_ ()-]+\\$)|
(^\\[a-zA-Z0-9_ ()-]+\\CONTRAT\\[a-zA-Z0-9_ ()-]+\\DOSSIER\\$)|
(^\\[a-zA-Z0-9_ ()-]+\\PREVENTION\\[a-zA-Z0-9_ ()-]+\\$)|
(^\\[a-zA-Z0-9_ ()-]+\\PRIME\\CIES\\$)|
(^\\[a-zA-Z0-9_ ()-]+\\SINISTRE\\[a-zA-Z0-9_ ()-]+\\$)|
(^\\[a-zA-Z0-9_ ()-]+\\SINISTRE\\[a-zA-Z0-9_ ()-]+\\(ASSURANCE|DOSSIER|EXPERTISE)\\$)
#",$repname)] ; then
echo $1
fi
};
find . -type d -exec AnalyseEtTraite {} \; |
Mouarf, je crois avoir décelé une nouvelle erreur :s
#^/[a-zA-Z0-9_ ()-]+/CHANTIER/[a-zA-Z0-9_ ()-]+/$# Je précise que mes slash sont là pour marquer les séparations entre chaque répertoire. En espérant que ca vous parle^^ |
Je viens de capter un truc avec les regexp... un truc qui va pas me convenir du tout lol...
|
Raaa, ca commence a devenir pesant cette histoire de regexp lol...
#!/bin/sh Je sais pas trop ce que ca veut dire... mais j'ia cruc omprendre que je devais initialiser un langage, pour que le shell comprenne mon script. Mais bon, je suis vraiment pas certain qu'un terminal debian comprenne un preg_match ... Si vous pouviez me confirmer ce point, ca serait bien cool. Sinon, pour ta dernière remarque, kilian, je suis pas sure que ca marche ton truc avec "+?" (ca voudrait dire répéter au moins une fois, et/ou répéter 0,1 ou plusieurs fois, d'où une redondance... à voir). J'ai testé, ca n'a rien changé (a mon avis, c'est car le preg_match ne doit pas du tout marcher, donc normal que ca change rien). Enfin bref, j'avoue que je me sens un poil dépassé là... (en tout cas, vraiment merci ton aide kilian; sans toi, j'aurais surement pas mal de cheveux en moins :p)
|
EDIT: bon, j'ai rien dit. Je retravaille dans mon ptit coin, et jvous redonne des nouvelles fraiches dès que possible.
|
Ouep, c'est ca^^
#!/usr/bin/perl
my $string2 = '^[a-zA-Z0-9_ ()-]+$';
my ($fichier, $dossier) = (undef, '/home/thib/RepAAnalyser');
opendir (my $dir, $dossier) or die "$dossier n'existe pas !";
my @files = readdir $dir;
foreach $fichier (@files)
{
if ((-d "$dossier/$fichier") && ($fichier =~ m/$string2/))
{ print "$fichier\n";
AnalyseDir ("$dossier/$fichier");
};
}
closedir $dir;
Ce code me renvoi bien les répertoires contenus dans RepAAnalyser, mais pas les sous répertoires. J'espère que la suite sera pas trop laborieuse :p |
Rebonjour,
#!/bin/sh
find . -type d -exec /home/thib/BupCOURvoip/creadoc080920/analyse {} \;
- script de la fonction analyse: #!/bin/sh grep ^\./infrasud $1 if [ "$?" -eq "0" ]; then echo $1 fi |
En fait, je souhaite sélectionner un ensemble de répertoires (grace aux regexp^^), et leur attribuer certains droits (setgid en particulier).
|
Je souhaite récupérer tout le chemin du répertoire, pour lui attribuer de nouveaux droits.
|