В настоящее время я застрял в проблеме с регулярным выражением PowerShell, так как я не могу получить желаемый вывод Servername, имени экземпляра и порта, если он доступен. По общему признанию, мне нужно многое понять, так как я новичок в регулярных выражениях.

Вот моя установка и мои выводы

Data:

  ZP000042
  QRMLD1001\TEST
  oFJA
  UUQE0294\FAR,8594

В основном мне нужно извлечь следующие предметы:

Match 1[QRMLD1001\TEST] - Servername: QRMLD1001 ; Instancename: TEST

Match 2[UUQE0294\FAR,8594] - Servername: UUQE0294 ; Instancename: FAR ; Port: 8594

Пока я могу извлечь Match 2[ UUQE0294\FAR,859] только с помощью этого регулярного выражения

(\w+)\\(\w+)\,(\d+)

Результат:

Groups   : {0, 1, 2, 3}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 16
Value    : UUQE0294\FAR,859

Success  : True
Name     : 1
Captures : {1}
Index    : 0
Length   : 8
Value    : UUQE0294

Success  : True
Name     : 2
Captures : {2}
Index    : 9
Length   : 3
Value    : FAR

Success  : True
Name     : 3
Captures : {3}
Index    : 13
Length   : 3
Value    : 859

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

0
CodeNagi 14 Мар 2018 в 13:32

2 ответа

Лучший ответ

Вы можете поместить квантификатор, который разрешает 0 вхождений после , и последнего числа, например

(\w+)\\(\w+)\,?(\d*)
1
Lance Toth 14 Мар 2018 в 10:35

Я мог бы просто сделать всю последнюю часть шаблона необязательной.

(\w+)\\(\w+)(,(\d+))?

Так что это будет соответствовать обоим этим

UUQE0294\FAR,8594
UUQE0294\FAR

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

(?<server>\w+)\\(?<instance>\w+)(,(?<port>\d+))?

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

$matches.server
$matches.instance
$matches.port

Если для порта нет соответствия, тогда $matches.port будет просто нулевым.

1
Matt 14 Мар 2018 в 12:42