Что нового

Обрезать ссылку после 4го знака "/" drek.xbntk

Soderling

Новичок
Сообщения
29
Репутация
0
Здравствуйте. Помогите с регуляркой

нужно обрезать https://t.me/aaa/bbb до вида
...https://t.me/aaa...
точки поставил что бы текст нормально отобразился, иначе иконка телеги появляется. Точек не должно быть)
 

joiner

Модератор
Локальный модератор
Сообщения
3,565
Репутация
632
Точно, ошибся
 

Alecsis

Осваивающий
Сообщения
128
Репутация
46
А может, проще так? Если, конечно , нужно ловить именно 4-е вхождение «/»
Код:
Local $sInput = 'https://t.me/aaa/bbb'
Local $iPos = StringInstr($sInput, 1, 4)
Local $sResult
$sResult = ($iPos > 0) ?  StringLeft($sInput, $iPos-1) : $sInput
 

Norm

Продвинутый
Сообщения
293
Репутация
77
Выглядит не очень-то проще и ошибка там ещё.
А как быть, если не https: , а http:
 

Alecsis

Осваивающий
Сообщения
128
Репутация
46
Выглядит не очень-то проще и ошибка там ещё.
А как быть, если не https: , а http:
Sorry, действительно косяк
Код:
Local $sInput, $iPos, $sResult, $iOccurrence
$iOccurrence = 4
;
$sInput = 'https://t.me/aaa/bbb'
$iPos = StringInstr($sInput, '/', 1, $iOccurrence)
$sResult = ($iPos > 0) ?  StringLeft($sInput, $iPos-1) : $sInput
ConsoleWrite('Рез-т обрезания #1 =' & $sResult & @CRLF)
;
$sInput = 'http://t.me/aaa/bbb'
$iPos = StringInstr($sInput, '/', 1, $iOccurrence)
$sResult = ($iPos > 0) ?  StringLeft($sInput, $iPos-1) : $sInput
ConsoleWrite('Рез-т обрезания #2 =' & $sResult & @CRLF)

Код:
>"C:\DevTools\AutoIt3\SciTE\..\AutoIt3.exe"       /ErrorStdOut "d:\Alecsis\Prog\AutoIt\_Debug\xxx.au3"     
Рез-т обрезания #1 =https://t.me/aaa
Рез-т обрезания #2 =http://t.me/aaa
>Exit code: 0    Time: 0.0542
 
Последнее редактирование:

Norm

Продвинутый
Сообщения
293
Репутация
77
Вы правы в том, что в Вашем примере не нужно думать над паттерном для регулярки, в этом и заключается простота.
Но опять же Ternary, тоже не все начинающие знают. Поэтому ещё проще для понимания, было бы так:
Код:
$iPos = StringInstr($sInput, "/", 0, 4)
If $iPos Then
     $sResult = StringLeft($sInput, $iPos-1)
Else
     $sResult = $sInput
EndIf

Но по простоте кода, это будет проще.
Код:
$sResult = StringRegExpReplace($sString, "(https?://[^/]+/[^/]+).*", "$1")
 
Последнее редактирование:

Alecsis

Осваивающий
Сообщения
128
Репутация
46
[…] Но опять же Ternary, тоже не все начинающие знают.

Но по простоте кода, это будет проще.
Код:
$sResult = StringRegExpReplace($sString, "(https?://[^/]+/[^/]+).*", "$1")
Imho, простота кода и простота понимания = несколько разные вещи. Насчёт Ternary согласен (лень было городить if/then/else), а вот регулярка для начинающих — вообще адский мутант-вуглускр:unknown:… Собсс-но, тут можно навертеть ещё кучу вариантов, однако ж главное, что вопрос ТСа решён.
 
Верх