Переключатель -Regex в Powershell - PullRequest
1 голос
/ 27 марта 2010
$source |% {
switch -regex ($_){
'\<'+$primaryKey+'\>(.+)\</'+$primaryKey+'\>' { 
$primaryKeyValue = $matches[1]; continue; }

}

Я хочу использовать динамическое значение ключа с switch-regex, это возможно?

1 Ответ

1 голос
/ 27 марта 2010

Вы можете использовать строку, которая автоматически расширяет переменные:

switch -regex (...) {
    "<$primaryKey>(.+)</$primaryKey>" { ... }
}

вместо того, чтобы соединять все вместе с конкатенацией строк (что довольно уродливо). switch -RegEx ожидает буквальную строку. Кроме того, нет необходимости экранировать < и > в регулярном выражении, поскольку они не являются метасимволами.

Если вам крайне необходимо выражение, которое генерирует строку (например, конкатенация строк по любой причине), то вы можете заключить в скобки:

switch -regex (...) {
    ('<'+$primaryKey+'>(.+)</'+$primaryKey+'>') { ... }
    ('<{0}>(.+)</{0}>' -f $primaryKey) { ... } # thanks, stej :-)
}

Вы также можете использовать выражения, которые явно сопоставляют регулярные выражения с фигурными скобками; см help about_Switch.

...