Je cherche à faire un traitement "complexe" d'une ligne de paramètres envoyée en ligne de commande par un logiciel métier.
L'éditeur donne comme informations :
Code : Tout sélectionner
PROG.EXE –P<Chemin> [-N<Nom>] [-F<Prénom>] [-B<Date de naissance>] [-D<ID patient>] [-G<Sexe>]
-P(.*) -N(.*) -F(.*) -B(.*) -D(.*) -G(.)
Mais bon, comme certains paramètres sont optionnels, ça ne peux pas fonctionner correctement. ^^
Du coup j'ai voulu prendre le problème différemment et extraire chaque information dans une variable définie.
Et donc pour le nom, je prends ce qu'il y a entre -N et la balise suivante qui peut être : -F, -B, -D ou -G
Tel que :
Code : Tout sélectionner
Local $sParams = "-P\\Serveur\D\Dossier -N LE NOM -FPierre Yves -D1245"
Local $aPinfos, $sName
; Nom
$aPinfos = StringRegExp($sParams, "(?U)-N(.*)-[FBDG]", 1)
If IsArray($aPinfos) Then
$sName = $aPinfos[0]
EndIf
; Et la suite comme ci-dessus pour les autres variables
Si je vire le Ungreedy, c'est la dernière balise du groupe qui est utilisée et du coup il me prend la totalité des paramètres jusqu'à la dernière balise au lieu de s'arrêter à la première trouvée.

Comment puis-je faire pour extraire tout ce qu'il y a entre -N et la première balise -F ou -B ou -D ou -G ou la fin de la ligne s'il n'y a pas de balise -F, -B, -D ou -G.
Exemples de résultats souhaités pour les lignes de commandes suivantes :
Code : Tout sélectionner
-NLE NOM ; Nom=LE NOM
-NLE NOM -FPierre Yves ; Nom=LE NOM Prénom=Pierre Yves
-N LE NOM -D1245 ; Nom=LE NOM ID=1245
-N LE NOM -GM ; Nom=LE NOM Genre=M
Ensuite, j'ai une question subsidiaire. Comme l'éditeur n'est même pas carré dans son propre code, il lui arrive de renvoyer le nom et le prénom sous la forme :
Code : Tout sélectionner
-NLE NOM Pierre Yves
D'après ce que j'ai pu observer, le nom est toujours en majuscule et le prénom est en minuscule sauf la première lettre de chaque prénom.
J'ai utilisé ceci : (.*[[:upper:]] ) ?(.*)
Mais est-ce la meilleur solution ???
Voilà. Je pense avoir donné le maximum d'infos pour aller droit au but.

Merci d'avance à mes chers experts de la RegExp. ^^