Question Recherche de string

Plus d'informations
il y a 15 ans 6 mois #7822 par Kevin Byrne-Langlois
Je fais souvent des recherches et comparaison de string et je n'avais jamais rencontré ce problème. Voici mon code initiale :

[code:1] $StringToFind = \"`/`/vT` `+= `\"Ind. performance;Indicateurs de performance\"
$StringToFind2 = \"`/`/vT` `+= `\"Courant`;Indicateurs de performance courant\"
$StringToFind3 = \"`/`/vT` `+= `\"Complet`;Indicateurs de performance\"
$StringToReplace = \"vT` `+= `\"Ind. performance;Indicateurs de performance\"
$StringToReplace2 = \"vT` `+= `\"Courant`;Indicateurs de performance courant\"
$StringToReplace3 = \"vT` `+= `\"Complet`;Indicateurs de performance\"

Set-content $GRFMenuFile $(switch -regex -file $GRFMenuFile {
$StringToFind {$_ -replace $matches[0],$StringToReplace}
$StringToFind2 {$_ -replace $matches[0], $StringToReplace2}
$StringToFind3 {$_ -replace $matches[0], $StringToReplace3}
default {$_}
})
[/code:1]

$StringtoFind2 et 3 ne fonctionne pas. Après des tests je me suis rendu compte qu'il bloquait au =, je me rappel pas qu'on devait \"escaper\" le charactère =. Même si je le fais ça marche pas, j'ai essayé avec des string, here string, regex.

Si je fais une match ca me donne false :

[code:1]
$StringToFind2 = @\"
//vT += \"Courant;Indicateurs de performance courant\"
\"@
clear
[regex]::IsMatch($StringToFind2, \"//vT += \"«»)
[/code:1]

J'ai cherché la documentation, en cas que le = soit spécial mais j'ai rien trouvé.

Quelqu'un à une idée ?

Message édité par: Grifter, à: 19/09/10 17:01

Message édité par: Grifter, à: 20/09/10 01:19

Message édité par: Grifter, à: 20/09/10 01:20<br><br>Message édité par: Grifter, à: 20/09/10 02:02

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

Plus d'informations
il y a 15 ans 6 mois #7823 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Recherche de string
Salut,
peux-tu éditer ton premier post et utiliser les balises code ?
Tel quel, j'ai un doute sur la construction du second bloc de code.<br><br>Message édité par: Laurent Dardenne, à: 19/09/10 17:51

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 6 mois #7825 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Recherche de string
Pour échapper une regex il faut procéder ainsi :
[code:1]
$StringToFind = [regex]::Escape(\&quot;//vT += `\&quot;Ind. performance;Indicateurs de performance\&quot;«»)
$StringToFind
[/code:1]
Ici il y a donc 2 niveaux d'échappement, le premier pour la regex le second pour l'interpréteur PowerShell.

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 5 mois #7838 par Kevin Byrne-Langlois
Réponse de Kevin Byrne-Langlois sur le sujet Re:Recherche de string
Malheureusement ça ne fonctionne pas plus !!! Il reconnait pas la string à changer.

Le code suivant donne false :

[code:1]
$StringToFind = [regex]::Escape(\&quot;//vT += `\&quot;Ind. performance;Indicateurs de performance\&quot;«»)
$StringToFind2 = [regex]::Escape(\&quot;//vT += `\&quot;Ind. performance;Indicateurs de performance\&quot;«»)

[Regex]::IsMatch($StringToFind,$StringToFind2)
[/code:1]<br><br>Message édité par: Grifter, à: 21/09/10 17:37

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

Plus d'informations
il y a 15 ans 5 mois #7839 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Recherche de string
Grifter écrit:

Malheureusement ça ne fonctionne pas plus !!! Il reconnait pas la string à changer.

Ton exemple ne peut réussir car tu modifies la chaîne à rechercher
[code:1]
[Regex]::IsMatch.OverloadDefinitions
#static bool IsMatch(string input, string pattern)
[/code:1]

input
Type : System.String
Chaîne dans laquelle une correspondance doit être recherchée.

pattern
Type : System.String
Modèle d'expression régulière à mettre en correspondance.

Ce code renvoi $True :
[code:1]
#Input est un nom de variable automatique
$Sinput = \&quot;//vT += `\&quot;Ind. performance;Indicateurs de performance\&quot;
#Echappe la regex, car le point, notamment, est un métacaractère
#mais on recherche bien la chaîne $Sinput.
$Pattern = [regex]::Escape(\&quot;//vT += `\&quot;Ind. performance;Indicateurs de performance\&quot;«»)

[Regex]::IsMatch($Sinput,$Pattern)
#True
[/code:1]

Tutoriels PowerShell

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

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