Предложения по более элегантному решению для замены 1 символа в URL - PullRequest
0 голосов
/ 27 января 2019

Итак, у меня есть URL, который я получаю через API.Шаблон будет похож на https://www.example.co.uk/category/000000000k/0000

Я хочу заменить второй k символ на x char.

Я пытался использовать str_replace(), но он также заменяетпервый k символ.

Итак, я использовал preg_split(), поэтому мое решение:

$url = preg_split( '/[\/]+/', 'https://www.example.co.uk/category/000000000k/0000' );
$url = $url[0] . '//' . $url[1] . '/' . $url[2] . '/' . str_replace( 'k', 'x', $url[3] ) . '/' . $url[4];

Итак, мое решение работает долго, пока шаблон URL не меняется,Тем не менее, я думаю, что было бы более элегантно, если бы мой Regex был на высоте.

Кто-нибудь здесь мог бы указать мне лучший путь?

Ответы [ 2 ]

0 голосов
/ 27 января 2019
$url = "https://www.example.co.uk/category/000000000k/0000";
echo preg_replace("/^[^k]+k[^k]+\Kk/", "x", $url),"\n";

Вывод:

https://www.example.co.uk/category/000000000x/0000

Объяснение:

/               # regex delimiter
  ^             # beginning of line
    [^k]+       # 1 or more any character that is not k
    k           # 1rst letter k
    [^k]+       # 1 or more any character that is not k
    \K          # forget all we have seen until this position
    k           # 2nd letter k
/               # regex delimiter
0 голосов
/ 27 января 2019

Если у k/ всегда есть числа до этого, а другая часть не имеет того же шаблона, это может сработать.

$url = "https://www.example.co.uk/category/000000000k/0000";
$url = preg_replace("/([0-9])k\//", "$1x/", $url);

Шаблон анотера.Найдите 3-й /, создайте подстроку и замените.

$url = "https://www.example.co.uk/category/000000000k/0000";

$pos = 0;
for ($i = 0; $i < 3; $i++) {
    $pos = strpos($url, "/", $pos);
    if (FALSE === $pos) {
        // error
        break;
    }
    $pos++;
}

if ($pos) {
    $url_tmp = substr($url, $pos);
    $url_tmp = str_replace("k/", "x/", $url_tmp);
    $url = substr($url, 0, $pos).$url_tmp;
} else {
    // $pos is 0 or FALSE
    // error
}

Если источник URL ненадежен, могут потребоваться дополнительные проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...