Войти

Показать полную графическую версию : [решено] Распределить ссылки


Страниц : 1 [2]

Iska
11-09-2020, 22:06
Ко всему прочему, давайте начистоту. PowerShell в основе которого лежит платформа .NET Framework де-юре может использоваться, но де-факто - труп, а трупов пинать нехорошо. Так что имхай, не имхай, но как раз оглядка на обратную совместимость - большая ошибка (как и основной тормоз в плане мигрирования на pwsh, ибо в последнем куда более полезных фич. »
«А я, сынок, всё одну, одну…»™ :).

DJ Mogarych
11-09-2020, 22:39
Powershell:

$url = (Read-Host "URL").trim() -replace '/$'

if ($url -match '\d{8}') {"Цифры"}
elseif ($url.Split('/')[2] -match "\..*?\.") {"Субдомен"}
else {"Юзер"}

greg zakharov
12-09-2020, 00:21
DJ Mogarych, если цифра восьмизначная, в общем-то можно жахать регуляркой, а вот по части сплитов, тримов и репласов... Вот поэтому лучше использовать URI.
[Uri[]]$u = 'https://site.com/user/anything/anything',
'https://anything.site.com/anything-anything-12345678/anything',
'https://anything.site.com'
$u.ForEach{$_ -match '\d{8}' ? 'number' : $_.PathAndQuery -eq '/' ? 'subdomain' : 'user'}
Если бы автор темы предоставил более входящих данных, не пришлось бы гадать что да как должно быть.

DJ Mogarych
12-09-2020, 13:06
[uri]

Прикольная штука!

ateka
12-09-2020, 14:25
Спасибо вам небожители что снисходите со своей помощью к нам - простым смертным.
Без вас я бы точно не справился. И так много ответов.
Теперь буду сидеть с словариком эльфийского гуглом разбираясь в пош коде.
Спасибо большое.

greg zakharov
13-09-2020, 15:10
Хотя megaloman уже предлагал решение (http://forum.oszone.net/showpost.php?p=2933711&postcount=10) на командном языке, сам он посетовал на объём кода. В принципе, кое-какие моменты им были намечены правильно (например, регулярка для восьмизначного числа), но многое можно нивелировать.
@echo off
setlocal enabledelayedexpansion
:: массив ссылок, индексация начинается с единицы
set "url.1=https://site.com/user/anything/anything"
set "url.2=https://anything.site.com/anything-anything-12345678/anything"
set "url.3=https://anything.site.com"
:: перебираем массив URL'ов
call:foreach "set url"
endlocal
exit /b

:foreach
for /l %%i in (1,1,3) do (
(%~1.%%i|>nul findstr /rc:"-[0-9]*/")&&(echo:%%~i - number)||(
for /f "tokens=2,3 delims=/" %%j in ('%~1.%%i') do (
if [%%k] neq [] (
echo:%%~i - user
) else echo:%%~i - subdomain
)
)
)
exit /b
После запуска сценария, получим:
1 - user
2 - number
3 - subdomain
Если перетасовать элементы массива, например, так:
...
set "#=!url.1!"
set "url.1=!url.3!"
set "url.3=!url.2!"
set "url.2=!#!"
:: выводим изменённый массив
set url
:: снова перебираем массив
call:foreach "set url"
...
Получим:
url.1=https://anything.site.com
url.2=https://site.com/user/anything/anything
url.3=https://anything.site.com/anything-anything-12345678/anything
1 - subdomain
2 - user
3 - number
Очевидно, что корректность зависит от токенов и регулярки. Это что касается решения задачи штатными средствами. Относительно сторонних программ\платформ\утилит: очень просто URL'ы разбираются jq, node и минишеллами вроде miniperl или miniruby, а также gawk'ом, - информация к размышлению.




© OSzone.net 2001-2012