Question Expressions régulieres ? (Résolu)

Plus d'informations
il y a 13 ans 6 mois #1216 par Lepertel
Hello les powershelleur :)

Voici mon probleme : Une requete AD me reccupere un chemin LDAP du type CN=Groupname,OU=xxxx,DC=test,DC=org que je mets dans une variable.
Jusque le tout va bien :).

Je souhaite en fait, juste reccuperer la valeur contenue correspondant à Groupname. J'ai essayé avec une expression reguliere du type 'CN=(.+),*\", mais sans succés (le CN= disparait bien, mais le reste de ma chaine reste alors que je voudrais supprimer tout ce qui se trouve derriere la derniere virgule).

Pouvez vous m'aider à trouver la bonne expression regulière, ou une autre méthode ?

Merci par avance

Stephane<br><br>Message édité par: Arnaud, à: 30/11/07 10:04

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 6 mois #1219 par Jacques Barathon
La syntaxe que tu utilises récupère la chaîne correspondante la plus longue possible. C'est ce qu'on appelle le mode \&quot;greedy\&quot; des expressions régulières, \&quot;greedy\&quot; voulant dire cupide: l'expression régulière ramasse le plus possible.

Pour récupérer la chaîne correspondante la plus courte possible, il faut utiliser une syntaxe \&quot;lazy\&quot;, c'est-à-dire paresseuse. Dans ton cas, ça peut se faire ainsi:

[code:1]
PS&gt; $path = \&quot;CN=Utilisateurs,OU=xxxx,DC=test,DC=org\&quot;
PS&gt; $path -match 'CN=(?&lt;groupname&gt;.+?),'
True
PS&gt; $matches.groupname
Utilisateurs[/code:1]
J'ai ajouté un nom à la collection '?&lt;groupname&gt;' pour la clarté de l'exemple, mais l'idée principale est d'ajouter un '?' après '.+'. C'est ce point d'interrogation qui indique qu'il faut être paresseux et non cupide.

Janel<br><br>Message édité par: janel, à: 23/10/07 05:14

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 6 mois #1221 par Lepertel
Réponse de Lepertel sur le sujet Re:expressions regulieres ?
Super, ca marche nickel :)

Trop fort tu es :)

Sais tu ou je peux trouver de la documentation sur les expressions régulières, car a chaque fois je galère pour trouver la bonne syntaxe à utiliser.

Merci encore

Stéphane

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 6 mois #1222 par Jacques Barathon
Les expressions régulières sont utilisées dans une multitude d'environnements, tu trouveras donc des tonnes de sites de référence sur Internet.

Mais malheureusement, il existe des différences (parfois subtiles) dans les implémentations. Donc le mieux pour se faire une idée de la syntaxe utilisable dans PowerShell, c'est encore MSDN. PowerShell repose sur le .NET Framework, et c'est également valable pour son support des expressions régulières:

msdn2.microsoft.com/fr-fr/library/hs600312(vs.80).aspx

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 6 mois #1223 par Lepertel
Réponse de Lepertel sur le sujet Re:expressions regulieres ?
encore une question (suite :))

En fait l'expression reguliere fonctionne correctement dans le cas ou ma requete me retourne un seul groupe. Mais dans certains ca, je vais reccuperer plusieurs groupes et mon resultat sera de la forme CN=toto,OU=test,DC=x,DC=y CN=titi,OU=test2,DC=x,DC=y et dans ce cas, je dois reccuperer l'ensemble des valeurs CN=. Ya til un mode paresseux mais pas trop dans les expressions reguliéres ? :) Merci encore pour ton aide

Stephane

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 6 mois #1225 par Jacques Barathon
Alors là, on atteint les limites de la syntaxe d'une expression régulière dans l'implémentation du .NET Framework! :P

Heureusement, on peut s'en sortir avec les API du même .NET Framework:

[code:1]
$regex = new-object regex \&quot;CN=(.+?),\&quot;
$result = $regex.match($path)
while ($result.success) {
$result.groups[1].value
$result = $result.nextmatch()
}[/code:1]
Ca devrait le faire.

Sur ce, moi, j'vais m'coucher... :silly:

Janel

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.163 secondes
Propulsé par Kunena