Регулярное выражение с powershell

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

Мне удалось получить XML-отображение текущих подключений, которые в то время были парящими.

Что мне нужно сделать, так это придумать выражение reg, в котором я извлекаю идентификатор пользователя и IP-адрес, а затем могу выполнить поиск, чтобы определить, есть ли дублирующий идентификатор пользователя и который имеет другой IP-адрес.

Мне удалось найти регулярное выражение для IP-адресов, которое является '\b\d{1,3}.\ D {1,3}. \ D {1,3}. \ D {1,3}\b'

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

Вот пример данных

<User id="13456" title="usersmith" />
<Player address="2.2.2.2" device="Windows" machineIdentifier="a9b222ef940" 

1 ответ

Решение

Я бы проанализировал это как XML, например:

#$xml = [xml](Get-Content myfile.xml)
#$xml = [xml](Invoke-WebRequest ... whatever).Content
$xml = [xml]@"
<?xml version="1.0" encoding="utf-8"?>
<root>
<User id="13456" title="usersmith" />
<Player address="2.2.2.2" device="Windows" machineIdentifier="a9b222ef940" />
</root>
"@

$xml.root.user.id

но если вы действительно хотите регулярное выражение, попробуйте решение @heemayl, кроме начала строки ^-корь, который может не соответствовать вашим реальным XML-данным (в этом случае вы предоставили неверные выборочные данные). Пример:

if('User id <User id="1354" thumb="plex.tv/users/a51d"; title="bob" />' -match '<User\s+id="([^"]+)"') { $Matches[1] }
Другие вопросы по тегам