Что нового

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

Soderling

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

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

Norm

Продвинутый
Сообщения
279
Репутация
74
Код:
Local $sString = "https://t.me/aaa/bbb/htlikj/lkjkl"
Local $sResult = StringRegExpReplace($sString, "(https?://[^/]+/[^/]+).*", "$1")
MsgBox(0, "Result", $sResult)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
StringTrimRight('https://t.me/aaa/bbb', 4)
 

joiner

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

Alecsis

Осваивающий
Сообщения
101
Репутация
41
А может, проще так? Если, конечно , нужно ловить именно 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

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

Alecsis

Осваивающий
Сообщения
101
Репутация
41
Выглядит не очень-то проще и ошибка там ещё.
А как быть, если не 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

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

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

Alecsis

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

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