Regex Соответствует любой строке powershell

Независимо от того, насколько хорошо я чувствую, что знаю регулярные выражения, они всегда кажутся избитыми.

Я ищу универсальный шаблон, который будет соответствовать любой строке. Единственный способ узнать, как обрабатывать все эти различные соглашения об именах, - это создать множество различных шаблонов регулярных выражений, и теперь я даже не уверен, что все данные собираются, поэтому мне придется вручную перепроверять он.

Я просто пытаюсь забрать все, что может быть в двух скобках []:

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]
}

То, как я это делаю, не порождает ошибок, но я не уверен, что он справится со всеми ситуациями, которые я мог бы обнаружить. С этим большим количеством данных проверка вручную практически невозможна.

Кроме того, если кто-нибудь знает о большой полезности для генерации шаблонов регулярных выражений, это будет очень признательно. Я только смог найти тестеры регулярных выражений, которые мне не очень полезны, и для регулярных выражений с powershell мало помогает онлайн.

Ответ 1

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

Ответ 2

Сопоставьте все, что не является скобкой. Создайте класс символов, содержащий ничего, кроме символов скобок:

$line -match "\[[^\[\]]+\]"

Ответ 3

Фокусировка на

"Я просто пытаюсь забрать все, что может быть в двух скобках []"

Я думаю, что \[.*\] - это то, что вы ищете.

Объяснение
Sice [ и ] имеют специальные цели, поэтому вам нужно использовать \ до этих символов.
. (точка) обозначает любой символ и * означает любое количество повторений предыдущего charector.
Здесь предыдущий символ ., поэтому .* обозначает любую общую строку.