PowerShell RegEx: получить SID из строки - PullRequest
2 голосов
/ 21 сентября 2019

Я пытаюсь запустить команду powershell, чтобы вернуть SID из строки.

$string = "The SID is S-1-9-1551374245-3853148685-361627209-2951783729-4075502353-0-0-0-0-3"

Select-String -Pattern "\bS-\d{1}-\d{1}-\d{10}-\d{10}-\d{9}-\d{10}-\d{10}-\d{1}-\d{1}-\d{1}-\d{1}-\d{1}\b" -InputObject $string 

когда я запускаю вышеизложенное, он возвращает всю строку, но мне нужен только SID #, который равен 'S-1-9-1551374245-3853148685-361627209-2951783729-4075502353-0-0-0-0-3'

Ответы [ 4 ]

4 голосов
/ 21 сентября 2019

Вы можете попробовать следующее регулярное выражение:

S-\d-(?:\d+-){1,14}\d+

Regex Demo

Объяснение:

S-              # Match S- literally
\d-             # Match a digit- literally
(?:\d+-){1,14}  # Non-capturing group to match recursively digit- from 1-14 times
\d+             # Match digit recursively
3 голосов
/ 21 сентября 2019
$Pattern = 'S-\d-(?:\d+-){1,14}\d+'
$Matches =  Select-String -Pattern $Pattern -InputObject $string
if ( $Matches ) { $Matches.Matches.Value }

Кредит для vs97 регулярных выражений

1 голос
/ 22 сентября 2019

Как показано в полезном ответе JosefZ , ваша единственная проблема состояла в том, что вы не извлекли интересующее совпадение из свойств объекта [Microsoft.PowerShell.Commands.MatchInfo], который ваш Select-Stringвыходы вызова.

Однако использование командлета в этом случае немного сложное;оператор -replace предлагает более простую и эффективную альтернативу:

$string = "The SID is S-1-9-1551374245-3853148685-361627209-2951783729-4075502353-0-0-0-0-3"

$string -replace `
  '.*\b(S-\d-\d-\d{10}-\d{10}-\d{9}-\d{10}-\d{10}-\d-\d-\d-\d-\d)\b.*', 
  '$1'

Я немного упростил ваше регулярное выражение: \d{1} -> \d.Обратите внимание, что он не соответствует всем возможным формам, которые могут иметь идентификаторы SID.

Обратите внимание, что регулярное выражение соответствует входной строке whole , и заменяет его только на группу захвата.((...), подвыражение, соответствующее SID), совпадает ($1).

0 голосов
/ 21 сентября 2019

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

\bS(?:-\d){2}(?:-\d{10}){2}-\d{9}(?:-\d{10}){2}(?:-\d){5}\b

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

Демонстрация 1

Или с видом сзади:

(?<=The SID is )\S+

Демонстрация 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...