Помогите пожалуйста с регуляркой

FD
На сайте с 12.05.2017
Offline
71
632

Добрый день. Нужно что бы php обрезал строку регуляркой:

Дано:

/zapros/asd/

/zapros/asd/1/2

/zapros/asd?yrsdf

/zapros/asd&dasdsadas

/zapros/asd%$#@dasdsadas

/zapros/asd/1121331

и т.д

И таких много. На выходе должно получаться всегда:

/zapros/asd

P/s Слово zapros нестатично, оно всегда разное

Как сделать средствами php? Спасибо!

НАКРУТКА INSTAGRAM (https://instagram777.ru) - Смешные цены!
vandamme
На сайте с 30.11.2008
Offline
675
#1

ну например так https://regex101.com/r/USP0Iz/1

FD
На сайте с 12.05.2017
Offline
71
#2
vandamme:
ну например так https://regex101.com/r/USP0Iz/1

<?php

$link = 'https://www.instagram.com/p/Bgsq5ADn622/?taken-by=nakruti_free';
$res1 = parse_url($link, PHP_URL_PATH);
$res2 = parse_url($link, PHP_URL_HOST);
$res3 = parse_url($link, PHP_URL_SCHEME);
$result1 = preg_replace('^/\w+/\w+', "/$1", $res1);
$urla = $res3.'://'.$res2.$result1;
$link = rtrim($urla, '/');
echo $link;
?>

Возвращает

https://www.instagram.com

а должен

https://www.instagram.com/p/Bgsq5ADn622
[umka]
На сайте с 25.05.2008
Offline
456
#3

Случай, конечно, совершенно не типичный, но попробуйте способом вот из этой темы:

/ru/forum/988342

Лог в помощь!
FD
На сайте с 12.05.2017
Offline
71
#4
'[umka:
;15534708']Случай, конечно, совершенно не типичный, но попробуйте способом вот из этой темы:
/ru/forum/988342

Там другое условие.. Обратите внимаение

W
На сайте с 18.09.2006
Offline
86
#5

Вот вам решение произвольного домена с http и httpsь и необязательным протаколом и поменом

$res = preg_replace('@^(https?:\/\/.*?)?\/(.*?)\/(.*?)(\/|\?|&|%).*@smi', "$1/$2/$3", $str);

для фиксированного домена

$res = preg_replace('@^(https?:\/\/www\.instagram\.com)?\/(.*?)\/(.*?)(\/|\?|&|%).*@smi', "$1/$2/$3", $str);

вот пример


$a = array(
'https://www.instagram.com/zap-ros/asd/',
'https://www.instagram.com/zapros/asd/1/2',
'https://www.instagram.com/ot_vet/na-vop-ros?yrsdf',
'https://www.instagram.com/zapros/asd&dasdsadas',
'http://www.instagram.com/zapros/asd%$#@dasdsadas',
'/zapros/asd/1121331',
);

foreach ($a as $str){
$res = preg_replace('@^(https?:\/\/.*?)?\/(.*?)\/(.*?)(\/|\?|&|%).*@smi', "$1/$2/$3", $str);
var_dump($res);
}
vandamme
На сайте с 30.11.2008
Offline
675
#6
FrancisDarroze:
а должен

Ну правильно, сначала вы говорите, мясо, а потом яйца.

сразу надо было пример до и после,

новый https://regex101.com/r/USP0Iz/2

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий