Динамически заменить подстроку на подстроку, используя случайный PHP - PullRequest
0 голосов
/ 16 ноября 2018

Я нашел это на SO, Динамически заменить подстроку на подстроку, используя PHP

Мне нужно что-то похожее на это, я не хочу удалять первую часть, но случайно обе.

это означает, что иногда мне нужно получить первую часть подстроки, а иногда и последнюю часть.

function deleteStringBetweenStrings($start, $end, $string) {
// create a pattern from the input and make it safe to use in a regular expression
$pattern = '|' . preg_quote($start) . '(.*)' . preg_quote($end) . '|U';
// replace every occurrence of this pattern with an empty string in full $s

tring
    return preg_replace($pattern, '', $string);
}


$String = "loads of text [[gibberish text|Text i Want]] more text  [[gibberish text|Text i Want]] more text [[if no separator then  just remove tags]]";

$String = deleteStringBetweenStrings("[[", "]]", $String);
echo $String;
//loads of text more text more text

Если я использую эту функцию с разделителями '[[' и ']]', это удалит полную подстроку внутри разделителей. но мне нужно, чтобы эта строка содержала одну (случайную) часть подстроки внутри разделителей. Мой ожидаемый результат будет как-

результат # 1 = загрузка текста бессмысленный текст больше текста Текст i Хочу больше текста, если нет разделителя, тогда просто удалите теги

результат # 2 = загрузка текста Текст, который я хочу больше текста Текст, который я хочу больше текста, если нет разделителя, тогда просто удалите теги

результат # 3 = загрузка текста Текст я хочу больше текста бессмысленный текст больше текста, если нет разделителя, тогда просто удалите теги

любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 ноября 2018

С помощью @ WiktorStribiżew я справился с этим.это дает мне результат, который я хотел с 1 разделителем, если он имеет более одного разделителя, 3-я часть остается без изменений.Было бы здорово, если бы кто-нибудь помог мне проехать 3-ю часть.спасибо всем.

function getSubstrings($start, $end, $string) {
    // create a pattern from the input and make it safe to use in a regular expression
    $pattern = '|' . preg_quote($start) . '(.*)' . preg_quote($end) . '|U';
    // replace every occurrence of this pattern with an empty string in full $string
    return preg_replace($pattern, '', $string);
}

function clearString($string) {
    // to remove '[]|' these, called str_replace($shortCode, $codeReplace, $string)
    $shortCode = array( "[", "]", '|');
    $codeReplace = array('', '', '');
    // initiating $StringBetweenStrings
    $StringBetweenStrings = '';
    // creates an array of [ and |
    $dl = array("[", '|');
    // randomly, calling one of the array
    $dl_before = $dl[array_rand($dl)];

    // checking if $dl_before is '[' or '|', if it's '|' then create $dl_after ']', else that would be '|'
    $dl_after =  ($dl_before=='|') ? ']' : '|';

    // split string with preg_split
    $res_array = preg_split('~(\[\[[^][|]*\|[^][]*]])~', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

    foreach ($res_array as $key => $value) {
      // calling getSubstrings to get first part or last part of substring & calling str_replace to remove delimiter and separator.
      $StringBetweenStrings .= str_replace($shortCode, $codeReplace , getSubstrings($dl_before, $dl_after, $value));
    }

// return expected string
    return $StringBetweenStrings;
}
...