Как работает этот Powershell Regex? - PullRequest
4 голосов
/ 14 октября 2011
'<Relation From="701047080" ObjectNumber="166543300" Output="77" To="464616324">' -match '(?<=Output=")[^"]*'

$matchs затем содержит 77?

Что я хочу, я просто не понимаю, почему это работает?

Я нашел материал, говорящий, что я мог:

match '(?<NAME>Some regex)'

Но я понятия не имею, что делает '(? <='? И мне ОЧЕНЬ хотелось бы понять синтаксис ... </p>

Мне действительно нужно вытащить значениеВывод и обоим ... И иметь только PowerShell в системе, мне нужно сделать это на ...

Ответы [ 2 ]

4 голосов
/ 14 октября 2011

Выражение (?<=Output=") представляет собой взгляд назад . Соответствует только сразу после строки Output=".

Выражение [^"]* представляет собой отрицательный класс символов . Он соответствует всем символам до следующей двойной кавычки (или до конца строки, если больше нет двойных кавычек).

3 голосов
/ 14 октября 2011

[^"]* говорит о любом количестве символов, кроме ".

[^"]* является основным выражением.

(?<=Output=") является объектом просмотра назад и гарантирует, что основное выражение следует за выражением в объекте просмотра, в данном случае Output=".Выражение в виде заднего вида не включено в совпадение

Не думаю, что регулярное выражение является оптимальным.

Вы могли бы использовать:

'<Relation From="701047080" ObjectNumber="166543300" Output="77" To="464616324">' -match 'Output="(.*?)"'

(с регулярным выражением, столь же простым как Output="(.*?)")

и получившим 77 в $matches[1]

Регулярному выражению, вероятно, было просто сложно с представлением сзади, чтобы Output=" не былчасть матча.Это делает регулярное выражение более сложным и снижает производительность.Все, что вам нужно, это приведенное выше регулярное выражение и извлечь 77 с соответствующей группой.

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