2013-08-02 3 views
0

Я хочу заменить символ и хочу поставить этот символ сразу после следующего символа в php. , например:Замените символ и замените его следующей строкой.

<?php 
$exa = array("R" => "r", "A" => "a", "V" => "v", "I" => "i"); 
echo strtr("RAVI", $exa); 
?> //displays "ravi" ok 

я хочу, чтобы заменить «V» с «V», а затем хотите поместить его после «I». вот так: «raiv»

+0

Могу ли я спросить, какое практическое применение это имеет? – MightyPork

+0

его конвертер шрифтов. –

+0

Это не совсем объясняло цель. Что испортило строку для шрифтов? – MightyPork

ответ

2

Я думаю, что это решение может заинтересовать:

Функция

function replaceAndMove($text, $replacements) { 

    $from = array_keys($replacements); 
    $to = array_values($replacements); 

    function fixFrom($s) { 
     return '/' . preg_quote($s, '/') . '(.|$)' . '/'; 
    } 

    function fixTo($s) { 
     return '${1}' . $s; 
    } 

    $from_ready = array_map('fixFrom', $from); 
    $to_ready = array_map('fixTo', $to); 

    return preg_replace($from_ready, $to_ready, $text); 
} 

Test Case

$text = "abcdXefghXijklX----aFb~~~cMd"; 

$replacements = array(
    'X' => 'x', 
    'F' => 'f', 
    'M' => 'm', 
); 

echo $text . '<br>'; 
echo replaceAndMove($text, $replacements); 

Выход

abcdXefghXijklX----aFb~~~cMd 
abcdexfghixjkl-x---abf~~~cdm 

Edit: Исправлены проблемы с регулярными выражениями-специальные символами, такими как. или]

+0

да, это то, что я хочу. –

+0

@ Ravikant, когда я ответил, это было небезопасно. Теперь он (отредактирован) - должен обрабатывать четные символы, имеющие особое значение в регулярном выражении. – MightyPork

+0

damnit еще один ошибка. Я надеюсь, что это новое редактирование работает хорошо. Если нет, я постараюсь снова помочь. – MightyPork

1

сначала выполните str_replace, затем используйте strlen, substr и индекс символьной строки, чтобы заменить последние 2 пятна, если это то, что вы пытаетесь сделать. Потому что вы можете получить доступ строку как массив символов каждый $ T [1] == е, если строка была «тест»

Если у вас есть несколько моделей «набор» вы можете просто сделать это:

$find = array('RAVI',...,so on); 
$replace = array('raiv',..., so on); 

$input = 'RAVI'; 

echo str_replace($find, $replace, $input); 

Просто добавьте пар множеств в массивы для большего количества замен ... Если это все, что вы хотите.

+0

пример пожалуйста :) –

+0

Нет, это не так. Он, видимо, хочет делать другие строки, не только этот пример. – MightyPork

0

Вы ищете что-то вроде этого:

<?php 

$string = "RAVIVL"; 
$replace_char = "v"; 
$string = strtolower($string); 
$pos = array_keys(array_intersect(str_split($string),array($replace_char))); 

foreach ($pos as $p) { 

    if (isset($string[$p+1])) { 
     $string[$p] = $string[$p+1]; 
     $string[$p+1] = $replace_char; 

    } 
} 
echo $string; 
?> 

свопов все вхождения O «против» со следующим письмом.

+0

$ string = "RAVIVP"; отображает «raivvp» не «raivpv» –

Смежные вопросы