web-dev-qa-db-fra.com

Regex Correspond à n'importe quelle chaîne de puissance

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.

15
Cole9350
$a = [regex]"\[(.*)\]"
$b = $a.Match("sdfqsfsf[fghfdghdfhg]dgsdfg") 
$b.Captures[0].value
20
JPBlanc

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 "\[[^\[\]]+\]"
7
Aaron Jensen

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.

2
Jithin Pavithran