Peu importe à quel point j'ai l'impression de connaître les expressions régulières, elles semblent toujours me battre.
Je recherche un modèle universel qui conviendra à toutes les cordes. La seule façon pour moi de comprendre comment gérer toutes ces conventions de nommage différentes était de créer un ensemble de modèles de regex différents, et maintenant je ne suis même pas sûr que toutes les données soient collectées, il me faudrait donc vérifier manuellement il.
J'essaie simplement de relever tout ce qui pourrait être entre deux crochets []:
elseif($line -match "\[\w*\d*\]") {
$pars = $matches[0]
}
elseif($line -match "\[\d*\w*\]") {
$pars = $matches[0]
}
elseif($line -match "\[\w*\d*_\w*\]") {
$pars = $matches[0]
}
elseif($line -match "\[\w*\d*_*\w*-*\w*:*\w*\]") {
$pars = $matches[0]
}
elseif($line -match "\[\w*_*\w*_*\w*_*\w*_*\w*_*\w*-*\w*\]") {
$pars = $matches[0]
}
La façon dont je le fais ne génère pas d’erreurs, mais je ne suis pas sûr que cela gère toutes les situations que je pourrais potentiellement rencontrer. Vérifier manuellement est presque impossible avec autant de données.
En outre, si quelqu'un connaissait un excellent utilitaire pour générer des motifs de regex, il serait très apprécié. Je n'ai pu trouver que des testeurs de regex qui ne me sont pas très utiles, et l'aide en ligne est très limitée pour les expressions régulières avec powershell.
$a = [regex]"\[(.*)\]"
$b = $a.Match("sdfqsfsf[fghfdghdfhg]dgsdfg")
$b.Captures[0].value
Correspond à tout ce qui n'est pas un support. Créez une classe de caractères contenant autre chose que les caractères entre crochets:
$line -match "\[[^\[\]]+\]"
Se concentrer sur
"J'essaie juste de ramasser tout ce qui pourrait être entre deux crochets []"
Je pense que\[.*\]
est ce que vous recherchez.
Explication
Sice[
et]
ont des buts particuliers, vous devez donc utiliser \
avant ces caractères..
(point) représente n'importe quel caractère et*
représente un nombre quelconque de répétitions du caractère précédent.
Ici, le caractère précédent est.
, donc.*
représente toute chaîne générale.