Регулярное выражение с 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] }